2012-08-26 113 views
0

我有一个字段的表:MySQL的:计数,通过组尚未返回所有结果

id | color | other fields.... 

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

颜色是枚举(红,蓝,绿)。

我想要的是按颜色排序的结果列表,并且还想知道红色/蓝色/绿色元素的计数。

所以从上表,我想像的信息:

1个红 5红色 2蓝色 6蓝色 3绿色 4绿色

和希望的计数为RED = 2,BLUE = 2,GREEN = 2

如果我使用GROUP BY颜色,我只得到3行。

我当然可以在一个单独的循环外计数或使用2个不同的查询。但任何方式来优化在单个查询中做到这一点将不胜感激。

+0

你想为所有的枚举值,而不是至少有一个条目他们的计数? – TheHe

回答

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