Mysql:count,group by还没有返回所有结果

时间:2012-08-26 06:25:17

标签: mysql performance count group-by query-optimization

我有一个包含字段的表:

id | color | other fields....

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

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

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

所以从上表中我想要的信息如下:

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

并希望计数为RED = 2,BLUE = 2,GREEN = 2

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

我当然可以在一个单独的循环中计算或使用2个不同的查询。但是,任何在单个查询中以最佳方式执行此操作的方法都将受到赞赏。

1 个答案:

答案 0 :(得分: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