SQL: Jak uzyskać liczbę każdej odrębnej wartości w kolumnie?

176

Mam tabelę SQL o nazwie „posty”, która wygląda następująco:

id | category
-----------------------
1  | 3
2  | 1
3  | 4
4  | 2
5  | 1
6  | 1
7  | 2

Każdy numer kategorii odpowiada kategorii. Jak mam policzyć, ile razy każda kategoria pojawia się w poście w jednym zapytaniu sql ?

Na przykład takie zapytanie może zwrócić tablicę symboliczną, taką jak ta: (1:3, 2:2, 3:1, 4:1)


Moja obecna metoda polega na użyciu zapytań dla każdej możliwej kategorii, takiej jak:, SELECT COUNT(*) AS num FROM posts WHERE category=#a następnie połączenie zwracanych wartości w ostateczną tablicę. Szukam jednak rozwiązania wykorzystującego tylko jedno zapytanie.

Jeff Gortmaker
źródło
3
Możliwy duplikat MySQL: Policz wystąpienia różnych wartości
Oleg V. Volkov

Odpowiedzi:

311
SELECT
  category,
  COUNT(*) AS `num`
FROM
  posts
GROUP BY
  category
Dan Grossman
źródło
3
Dzięki! To było o wiele prostsze niż myślałem!
Jeff Gortmaker
4
@MichelAyres: źródło?
Moberg
5
„Oznacza to, że standard ANSI uznaje to za oczywiste, co masz na myśli. COUNT (1) został zoptymalizowany przez dostawców RDBMS z powodu tego przesądu. W przeciwnym razie zostałby oceniony zgodnie z ANSI” Liczba (*) vs Liczba (1)
Michel Ayres,
@Moberg Tak się nauczyłem (starzy ludzie uczą przesądów ...). Oto mała część czatu do dyskusji na ten temat
Michel Ayres
1
Działa „tam”, gdy używasz nazw kolumn i tabel, które istnieją w przykładzie.
Dan Grossman