SQL: Wie kann die Anzahl der einzelnen Werte in einer Spalte ermittelt werden?


175

Ich habe eine SQL-Tabelle namens "posts", die so aussieht:

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

Jede Kategorienummer entspricht einer Kategorie. Wie würde ich vorgehen , um zu zählen, wie oft jede Kategorie in einem Beitrag in einer SQL-Abfrage angezeigt wird ?

Eine solche Abfrage kann beispielsweise ein symbolisches Array wie das folgende zurückgeben: (1:3, 2:2, 3:1, 4:1)


Meine derzeitige Methode besteht darin, Abfragen für jede mögliche Kategorie zu verwenden, z. B.: SELECT COUNT(*) AS num FROM posts WHERE category=#, und dann die Rückgabewerte zu einem endgültigen Array zu kombinieren. Ich suche jedoch nach einer Lösung, die nur eine Abfrage verwendet.


Antworten:


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

3
Vielen Dank! Es war viel einfacher als ich dachte!
Jeff Gortmaker

4
@ MichaelAyres: Quelle?
Moberg

5
"Das heißt, der ANSI-Standard erkennt, dass es offensichtlich blutet, was Sie meinen. COUNT (1) wurde von RDBMS-Anbietern aufgrund dieses Aberglaubens optimiert. Andernfalls würde es gemäß ANSI" Count (*) vs Count (1)
Michel Ayres

@Moberg So habe ich gelernt (alte Leute unterrichten Aberglauben ...). Hier ist ein kleiner Teil des Chats für eine Diskussion darüber
Michel Ayres

1
Es funktioniert "dort", wenn Sie Spalten- und Tabellennamen verwenden, die im Beispiel vorhanden sind.
Dan Grossman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.