按天数切片数据表:SQL分组查询结果不符预期求修正
修正SQL实现数据分组统计需求
原始数据表
| col1 | days |
|---|---|
| A | 2 |
| B | 3 |
| C | 1 |
| C | 5 |
| D | 3 |
| A | 3 |
| B | 7 |
| A | 4 |
期望输出结果
| col1 | <=2days | <=5days | <=7days |
|---|---|---|---|
| A | 1 | 2 | 0 |
| B | 0 | 1 | 1 |
| C | 1 | 1 | 0 |
| D | 0 | 1 | 0 |
错误的SQL语句
select col1, CASE WHEN days <=2 then count(days) as "<=2days", CASE WHEN days > 2 and days <=5 then count(days) as "<=5days", CASE WHEN days > 5 and days <=7 then count(days) as "<=7days" from tableA group by col1,days
错误结果
| col1 | <=2days | <=5days | <=7days |
|---|---|---|---|
| A | 1 | 0 | 0 |
| A | 0 | 2 | 0 |
| B | 0 | 1 | 0 |
| B | 0 | 0 | 1 |
| C | 0 | 1 | 0 |
| C | 1 | 0 | 0 |
| D | 0 | 1 | 0 |
修正后的SQL语句
SELECT col1, SUM(CASE WHEN days <= 2 THEN 1 ELSE 0 END) AS "<=2days", SUM(CASE WHEN days > 2 AND days <= 5 THEN 1 ELSE 0 END) AS "<=5days", SUM(CASE WHEN days > 5 AND days <= 7 THEN 1 ELSE 0 END) AS "<=7days" FROM tableA GROUP BY col1;
修正说明
- 原SQL错误点:
GROUP BY col1, days会将每个不同的days值单独分组,导致同一col1产生多条结果;CASE中直接使用count(days)逻辑错误,无法正确统计区间内的记录数。
- 修正逻辑:
- 仅按
col1分组,保证每个类别只返回一行数据; - 利用
SUM()函数配合CASE条件判断,符合区间条件时返回1,否则返回0,累加后得到每个区间的准确计数。
- 仅按
内容的提问来源于stack exchange,提问作者user3251686
相关产品推荐
相关产品推荐

