2016-01-11 11 views
8

Tôi có bảng - vì mục đích của câu hỏi này, nó có một cột word. Thông tin dưới đây trong bảng này:GROUP THEO số hàng được GROUP BY trả về trong MySQL

  • apple - xuất hiện 3 lần
  • banana - xuất hiện 5 lần
  • pear - xuất hiện 3 lần

tôi đã viết mã SQL sau đây để chọn từng từ duy nhất, cùng với số lần từ đó xuất hiện trong bảng:

SELECT word, COUNT(word) FROM table GROUP BY word ORDER BY COUNT(word) DESC; 

này trả về cho tôi những thông tin sau:

-------------------------- 
| word  | COUNT(word) | 
-------------------------- 
| banana | 5   | 
-------------------------- 
| apple | 3   | 
-------------------------- 
| pear  | 3   | 
-------------------------- 

Có cách nào để viết một truy vấn trả lại các thông tin sau:

----------------------------- 
| COUNT(word) | words  | 
----------------------------- 
| 5   | banana  | 
----------------------------- 
| 3   | apple, pear | 
----------------------------- 

Tôi đã suy nghĩ dọc theo dòng của đôi GROUP BY, nhưng thiên đường' t nghĩ nhiều lắm.

Trả lời

7

Bạn có thể sử dụng GROUP_CONCAT:

SELECT word_count, GROUP_CONCAT(word SEPARATOR ', ') as words 
FROM (SELECT word, COUNT(word) as word_count 
     FROM table 
     GROUP BY word) w 
GROUP BY word_count 
ORDER BY word_count DESC; 
+1

đã làm các trick - chỉ cần lưu ý rằng 'GROUP_CONCAT' không mất dấu phẩy - nó cần phải có' SEPARATOR', tiếp theo là dấu phân cách trong dấu ngoặc kép. – think123

+0

Ồ vâng, xin lỗi vì bộ não rắm ở đó. – wogsland