如何使用GROUP BY实现按Postid统计不同type的记录数量?
解决方案:按Postid统计不同Type的数量
别担心,这个需求用条件聚合函数就能完美解决!你之前用GROUP BY没得到预期结果,应该是没针对不同type值做分别统计~
预期输出效果
先明确我们要得到的结果格式:
| postid | type_0_count | type_1_count |
|---|---|---|
| 20 | 4 | 2 |
| 21 | 3 | 3 |
方法一:使用COUNT + CASE语句
这种方法利用COUNT会忽略NULL值的特性,当type匹配目标值时返回1,否则返回NULL,从而统计对应类型的行数:
SELECT postid, COUNT(CASE WHEN type = 0 THEN 1 END) AS type_0_count, COUNT(CASE WHEN type = 1 THEN 1 END) AS type_1_count FROM your_table_name -- 替换成你的实际表名 GROUP BY postid;
方法二:使用SUM + CASE语句
如果你更习惯用SUM,也可以让匹配条件时返回1,不匹配时返回0,求和后就是对应类型的数量:
SELECT postid, SUM(CASE WHEN type = 0 THEN 1 ELSE 0 END) AS type_0_count, SUM(CASE WHEN type = 1 THEN 1 ELSE 0 END) AS type_1_count FROM your_table_name -- 替换成你的实际表名 GROUP BY postid;
验证数据匹配度
我们对照你给出的原始数据检查:
- Postid=20:
type=0的行是id1、5、9、11,共4条;type=1的行是id3、7,共2条,完全符合预期。 - Postid=21:
type=0的行是id4、6、12,共3条;type=1的行是id2、8、10,共3条,和需求完全匹配。
内容的提问来源于stack exchange,提问作者drubecepha
相关产品推荐
相关产品推荐

