MySQL中按唯一ID统计各Val值计数的实现方案
解决方案:一次性统计ID的总记录数与各Val值计数
嘿,这事儿用条件聚合就能一步搞定,不用反复跑单个Val的查询啦!我们可以在按ID分组的基础上,配合CASE语句和聚合函数,一次性算出你要的所有统计结果。
最终查询语句
SELECT ID, COUNT(*) AS count, COUNT(CASE WHEN Val = 'a' THEN 1 END) AS a, COUNT(CASE WHEN Val = 'b' THEN 1 END) AS b, COUNT(CASE WHEN Val = 'c' THEN 1 END) AS c FROM table1 GROUP BY ID ORDER BY ID;
语句逻辑解释
COUNT(*):直接统计每个ID对应的总记录数,不管Val字段是什么值。COUNT(CASE WHEN Val = 'x' THEN 1 END):当Val匹配目标值时返回1,否则返回NULL;而COUNT函数会自动忽略NULL值,这样就精准得到了该Val值在当前ID下的记录数。如果某个ID没有对应Val值,结果自然就是0,完全符合你想要的输出格式。
执行后输出结果
运行上述语句后,会得到和你期望完全一致的结果:
| ID | count | a | b | c |
|---|---|---|---|---|
| 1 | 3 | 2 | 1 | 0 |
| 2 | 3 | 0 | 1 | 2 |
| 3 | 1 | 0 | 0 | 1 |
内容的提问来源于stack exchange,提问作者Vector JX
相关产品推荐
相关产品推荐

