2016-01-11 16 views
8

Mam tabelę - dla celów tego pytania ma jedną kolumnę word. Poniższe informacje są w poniższej tabeli:GROUP Według liczby wierszy zwróconych przez GROUP BY w MySQL

  • apple - pojawia się 3 razy
  • banana - pojawia się 5 razy
  • pear - pojawia się 3 razy

Napisałem następujący kod SQL, aby wybrać każdy słowo jednoznacznie wraz z liczbą razy, kiedy to słowo pojawia się w tabeli:

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

ta zwraca mi następujące informacje:

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

Czy istnieje sposób, aby napisać zapytanie do powrotu następujące informacje:

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

Myślałam wzdłuż linii podwójnej GROUP BY, ale haven” jeszcze dużo myślałem.

Odpowiedz

7

Można użyć 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

załatwiło sprawę - po prostu nie pamiętać, że 'GROUP_CONCAT' nie bierze przecinek - musi mieć' SEPARATOR', a następnie przez separator w cudzysłowie. – think123

+0

O tak, przepraszam za pierdnięcie w mózgu. – wogsland