DB2中实现多列组合去重计数的方法问询
DB2中多列组合去重计数的实现方法
DB2不支持COUNT(DISTINCT col1, col2)这类直接在COUNT中传入多列的语法,以下是两种可行的解决方案:
方法1:拼接多列为单个表达式后去重计数
将需要去重的多列拼接成唯一字符串(建议加入分隔符避免拼接冲突),再用COUNT(DISTINCT)统计:
-- 统计col1和col2组合的去重数量 SELECT COUNT(DISTINCT CONCAT(col1, '|', col2)) AS distinct_count FROM your_table;
注意:如果列值可能包含分隔符(如|),请替换为不会出现在数据中的特殊字符,避免错误合并。
方法2:子查询先去重再统计行数
通过子查询先对多列组合去重,再统计结果集的行数,这种方法更可靠,尤其适合含NULL值的场景:
-- 统计col1和col2组合的去重数量 SELECT COUNT(*) AS distinct_count FROM ( SELECT DISTINCT col1, col2 FROM your_table ) AS subquery;
针对你的示例需求(分组统计每组记录数)
根据你提供的示例数据和期望输出,实际需要按column1、column2、date分组,统计每组的出现次数,具体实现如下:
示例数据
| column1 | column2 | date |
|---|---|---|
| 1 | a | 2022-12-01 |
| 1 | a | 2022-12-01 |
| 2 | a | 2022-11-30 |
| 2 | b | 2022-11-30 |
| 1 | b | 2022-12-01 |
实现SQL
SELECT column1, column2, date, COUNT(*) AS count FROM your_table GROUP BY column1, column2, date ORDER BY date DESC, column1, column2;
执行结果
| column1 | column2 | date | count |
|---|---|---|---|
| 1 | a | 2022-12-01 | 2 |
| 1 | b | 2022-12-01 | 1 |
| 2 | a | 2022-11-30 | 1 |
| 2 | b | 2022-11-30 | 1 |
内容的提问来源于stack exchange,提问作者rev gan
相关产品推荐
相关产品推荐

