Mysql:计数,分组,但返回所有结果

Posted

技术标签:

【中文标题】Mysql:计数,分组,但返回所有结果【英文标题】:Mysql: count, group by yet return all results 【发布时间】:2012-08-26 06:25:16 【问题描述】:

我有一个包含字段的表格:

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】:
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

【讨论】:

以上是关于Mysql:计数,分组,但返回所有结果的主要内容,如果未能解决你的问题,请参考以下文章

mysql - 按不存在的值分组

MySQL必知应会-第13章-分组数据

核心数据:分组和计数结果返回空列表

按月对记录进行分组并计数 - Mongoose、nodeJs、mongoDb

对超过百万行进行排序的分组

MySQL必知必会--分 组 数 据