构建基于条件选择GROUP BY分组取值的SQL查询
SQL分组查询需求解决
需求说明
按value字段分组后,执行以下逻辑:
- 若分组内存在以2开头的
fee值,选取该分组内fee的最小值 - 若分组内仅存在以4开头的
fee值,选取该分组内fee的最大值
输入数据
| value | fee |
|---|---|
| val_1 | 2001 |
| val_1 | 4003 |
| val_1 | 4002 |
| val_2 | 4512 |
| val_2 | 4186 |
| val_3 | 4125 |
| val_4 | 2058 |
| val_5 | 2296 |
现有无法满足需求的SQL
SELECT value, CASE When CAST (fee as varchar) like '1%' THEN min(fee) ELSE max(fee) END as fee_sorted FROM table_1 GROUP BY 1
期望输出结果
| value | fee_sorted |
|---|---|
| val_1 | 2001 |
| val_2 | 4512 |
| val_3 | 4125 |
| val_4 | 2058 |
| val_5 | 2296 |
正确SQL解决方案
SELECT value, CASE -- 判断分组内是否存在以2开头的fee值 WHEN MAX(CASE WHEN CAST(fee AS VARCHAR) LIKE '2%' THEN 1 ELSE 0 END) = 1 THEN MIN(fee) ELSE MAX(fee) END AS fee_sorted FROM table_1 GROUP BY value;
逻辑说明
- 通过
MAX(CASE WHEN CAST(fee AS VARCHAR) LIKE '2%' THEN 1 ELSE 0 END)判断分组内是否存在以2开头的fee:只要有一个符合条件,结果就是1,否则为0 - 若判断结果为1,取分组内
fee的最小值;否则取最大值,匹配仅存在4开头值的场景
内容的提问来源于stack exchange,提问作者hamesjendo
相关产品推荐
相关产品推荐

