จำนวน MySQL เกิดขึ้นมากกว่า 2


93

ฉันมีโครงสร้างตารางต่อไปนี้

+  id  +  word  +
+------+--------+

ตารางจะเต็มไปด้วยคำที่อยู่ด้านล่างของข้อความที่กำหนดดังนั้นข้อความ

สวัสดีลาก่อนสวัสดี

จะส่งผลให้

+  id  +  word  +
+------+--------+
+   1  + hello  +
+------+--------+
+   2  + bye    +
+------+--------+
+   3  + hello  +
+------+--------+

ฉันต้องการสร้างแบบสอบถามแบบเลือกที่จะส่งคืนจำนวนคำที่ซ้ำกันอย่างน้อยสองครั้งในตาราง (เช่นสวัสดี)

SELECT COUNT(id) FROM words WHERE (SELECT COUNT(words.word))>1

ซึ่งแน่นอนว่าผิดและมากเกินไปเมื่อโต๊ะมีขนาดใหญ่ มีความคิดอย่างไรในการบรรลุวัตถุประสงค์ดังกล่าว? ในตัวอย่างที่ให้มาข้างต้นฉันคาดหวัง 1


มีใครเห็นเครื่องหมายขีดล่างเหมือนสะพานเชือก "ย้อย" บ้างไหม?
หยด

คำตอบ:


232

หากต้องการดูรายการคำที่ปรากฏมากกว่าหนึ่งครั้งพร้อมกับความถี่ที่เกิดขึ้นให้ใช้ GROUP BY และ HAVING:

SELECT word, COUNT(*) AS cnt
FROM words
GROUP BY word
HAVING cnt > 1

หากต้องการค้นหาจำนวนคำในชุดผลลัพธ์ด้านบนให้ใช้เป็นแบบสอบถามย่อยและนับแถวในแบบสอบถามภายนอก

SELECT COUNT(*)
FROM
(
    SELECT NULL
    FROM words
    GROUP BY word
    HAVING COUNT(*) > 1
) T1

1
เพียงแค่แอดออนคุณก็สามารถใช้นามแฝงได้เช่นกันใน "มี" เช่นคำที่เลือก COUNT (*) เป็น cnt จากคำ GROUP BY word HAVING cnt> 1
Vaibhav Jain


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.