如何编写MySQL语句获取唯一cab和name并统计value=0与>0的数量?
问题描述
现有一张表,结构及示例数据如下:
| cab | name | value |
|---|---|---|
| 1 | PHP | 1 |
| 1 | PHP | 2 |
| 1 | PHP | 0 |
| 2 | LHL | 0 |
| 3 | GHG | 3 |
| 3 | GHG | 2 |
需要按cab和name分组,统计每组中value=0的数量和value>0的数量,期望结果如下:
| cab | name | value=0 | value>0 |
|---|---|---|---|
| 1 | PHP | 1 | 2 |
| 2 | LHL | 1 | 0 |
| 3 | GHG | 0 | 2 |
解决方案
使用条件聚合即可实现需求,通过SUM()结合CASE语句分别统计符合条件的记录数:
SELECT cab, name, SUM(CASE WHEN value = 0 THEN 1 ELSE 0 END) AS `value=0`, SUM(CASE WHEN value > 0 THEN 1 ELSE 0 END) AS `value>0` FROM your_table_name GROUP BY cab, name;
代码说明
GROUP BY cab, name:按cab和name的唯一组合分组SUM(CASE WHEN value = 0 THEN 1 ELSE 0 END):遍历每组数据,遇到value=0则计数1,否则计数0,求和后得到该组value=0的总数量SUM(CASE WHEN value > 0 THEN 1 ELSE 0 END):同理,统计每组value>0的总数量
注意:将语句中的your_table_name替换为你实际使用的表名。
内容的提问来源于stack exchange,提问作者jonfarrugia
相关产品推荐
相关产品推荐

