2012-08-26 4 views
0

J'ai une table avec des champs:Mysql: compter, groupe par retour encore tous les résultats

id | color | other fields.... 

1 red 
2 blue 
3 green 
4 green 
5 red 
6 blue 

couleur est ENUM (rouge, bleu, vert). Ce que je veux, c'est une liste de résultats classés par couleur, et je veux aussi savoir le nombre d'éléments avec des couleurs rouge/bleu/vert.

Donc, à partir du tableau ci-dessus, je veux les informations comme:

1 rouge 5 rouge 2 bleu 6 bleu 3 vert 4 vert

et veulent les compte comme RED = 2, BLEU = 2, VERT = 2

Si j'utilise la couleur GROUP BY, j'obtiens seulement 3 lignes.

Je pourrais bien sûr compter dans une boucle séparée à l'extérieur ou utiliser 2 requêtes différentes. Mais n'importe quel moyen de le faire de manière optimale dans une seule requête serait apprécié.

+0

Vous voulez les comptes pour TOUTES les valeurs enum au lieu de celles qui ont au moins une entrée? – TheHe

Répondre

1
SELECT c.*, ColorCounts.ColorCount 
FROM colors AS c 
INNER JOIN (
      SELECT color, COUNT(*) AS ColorCount 
      FROM colors 
      GROUP BY color 
      ) AS ColorCounts 
     ON ColorCounts.color = c.color 
ORDER BY c.color, c.id 
Questions connexes