如何编写DB2查询,按ID统计ABC和ABCD值的出现次数并转列输出?
DB2分组统计特定值出现次数
问题说明
现有DB2表数据如下:
| ID | value |
|---|---|
| 1 | ABC |
| 1 | ABC |
| 1 | ABCD |
| 2 | ABC |
value列仅包含ABC和ABCD两个取值,需按ID分组,统计每个ID对应的两类值出现次数,输出格式要求如下:
| ID | count (ABC) | count (ABCD) |
|---|---|---|
| 1 | 2 | 1 |
| 2 | 1 | 0 |
解决方案
可以使用CASE WHEN结合SUM函数实现需求,DB2查询语句如下:
SELECT ID, SUM(CASE WHEN value = 'ABC' THEN 1 ELSE 0 END) AS "count (ABC)", SUM(CASE WHEN value = 'ABCD' THEN 1 ELSE 0 END) AS "count (ABCD)" FROM your_table_name -- 替换为实际表名 GROUP BY ID ORDER BY ID;
逻辑说明
CASE WHEN逐行判断value取值,匹配目标值时返回1,否则返回0SUM函数对每个ID分组内的判断结果求和,得到对应值的出现次数- 对于无对应取值的分组(比如ID=2的ABCD),SUM会将所有0相加,最终返回0,符合输出要求
内容的提问来源于stack exchange,提问作者Ashutosh Mahato
相关产品推荐
相关产品推荐

