Số lần xuất hiện của MySQL lớn hơn 2


91

Tôi có cấu trúc bảng sau

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

Bảng được lấp đầy bởi các từ ở mức thấp hơn của một văn bản nhất định, vì vậy văn bản

Xin chào tạm biệt xin chào

sẽ dẫn đến

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

Tôi muốn thực hiện một truy vấn SELECT sẽ trả về số từ được lặp lại ít nhất hai lần trong bảng (như xin chào)

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

tất nhiên là rất sai và siêu quá tải khi bảng lớn. Bất kỳ ý tưởng về làm thế nào để đạt được mục đích như vậy? Trong ví dụ đã cho ở trên, tôi mong đợi 1


Có ai khác nhìn thấy gạch dưới như một cây cầu dây "võng" không?
giọt

Câu trả lời:


228

Để có danh sách các từ xuất hiện nhiều lần cùng với tần suất xuất hiện của chúng, hãy sử dụng kết hợp GROUP BY và HAVING:

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

Để tìm số từ trong tập kết quả ở trên, hãy sử dụng nó làm truy vấn con và đếm các hàng trong truy vấn bên ngoài:

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

1
Chỉ là một addon, bạn cũng có thể sử dụng bí danh trong "have". Giống như lời SELECT, COUNT (*) AS cnt TỪ từ GROUP BY từ HAVING cnt> 1
Vaibhav Jain

17
SELECT count(word) as count 
FROM words 
GROUP BY word
HAVING count >= 2;

CodeIgniter cũng hỗ trợ có, vì vậy điều này là hoàn hảo. Cảm ơn
Won Jun Bae

6

SELECT word, COUNT(*) FROM words GROUP by word HAVING COUNT(*) > 1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.