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.


Odpowiedzi:


311
SELECT
  category,
  COUNT(*) AS `num`
FROM
  posts
GROUP BY
  category

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.