SQL: Comment obtenir le décompte de chaque valeur distincte dans une colonne?


176

J'ai une table SQL appelée "posts" qui ressemble à ceci:

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

Chaque numéro de catégorie correspond à une catégorie. Comment pourrais-je compter le nombre de fois que chaque catégorie apparaît sur un message dans une seule requête SQL ?

À titre d'exemple, une telle requête peut renvoyer un tableau symbolique tel que celui-ci: (1:3, 2:2, 3:1, 4:1)


Ma méthode actuelle consiste à utiliser des requêtes pour chaque catégorie possible, telle que SELECT COUNT(*) AS num FROM posts WHERE category=#:, puis à combiner les valeurs de retour dans un tableau final. Cependant, je recherche une solution qui n'utilise qu'une seule requête.


Réponses:


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

3
Merci! C'était beaucoup plus simple que je ne le pensais!
Jeff Gortmaker

4
@MichelAyres: source?
Moberg

5
"Autrement dit, la norme ANSI reconnaît ce que vous voulez dire comme une évidence. COUNT (1) a été optimisé par les fournisseurs de SGBDR en raison de cette superstition. Sinon, il serait évalué selon ANSI" Count (*) vs Count (1)
Michel Ayres

@Moberg C'est comme ça que j'ai appris (des personnes âgées enseignant des superstitions ...). Voici une petite partie du chat pour en discuter
Michel Ayres

1
Cela fonctionne «là» lorsque vous utilisez des noms de colonne et de table qui existent dans l'exemple.
Dan Grossman
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.