如何按Date分组统计Value1/Value2非NULL值的唯一ID数量
解决方案
原始数据表
| ID | Type | Date | Value1 | Value2 |
|---|---|---|---|---|
| 1 | A | 31-Oct-22 | NULL | 0.5 |
| 1 | B | 31-Oct-22 | NULL | 0.6 |
| 1 | C | 31-Oct-22 | 0.8 | 0.7 |
| 1 | A | 30-Sep-22 | 0.6 | NULL |
| 2 | A | 31-Oct-22 | 0.2 | NULL |
| 2 | C | 31-Oct-22 | NULL | 0.3 |
| 2 | B | 30-Sep-22 | NULL | NULL |
| 2 | D | 30-Sep-22 | NULL | NULL |
需求说明
按Date字段分组,统计每个日期下:
Value1列存在非NULL值的唯一ID数量Value2列存在非NULL值的唯一ID数量
实现SQL
SELECT Date, COUNT(DISTINCT CASE WHEN Value1 IS NOT NULL THEN ID END) AS Value1, COUNT(DISTINCT CASE WHEN Value2 IS NOT NULL THEN ID END) AS Value2 FROM your_table_name GROUP BY Date ORDER BY Date DESC;
代码解释
- CASE表达式:针对每个值列,筛选出非NULL的记录并保留对应ID;NULL值记录的CASE返回空值,不会被COUNT统计。
- COUNT(DISTINCT ...):对筛选后的ID去重计数,确保同一日期下同一个ID即使有多条非NULL记录,也只统计一次。
- GROUP BY Date:按日期分组,输出每个日期的独立统计结果。
执行结果
| Date | Value1 | Value2 |
|---|---|---|
| 31-Oct-22 | 2 | 2 |
| 30-Sep-22 | 1 | 0 |
内容的提问来源于stack exchange,提问作者x0nar
相关产品推荐
相关产品推荐

