如何将长格式查询结果转宽:按ID展示Primary/Secondary最小得分
解决长格式转宽格式:按ID聚合展示Primary/Secondary的最小分数
你可以通过条件聚合(将CASE语句嵌套在聚合函数中)实现需求,无需按rate分组,直接按id分组即可得到每个ID对应的两类最小分数。
修改后的SQL语句
SELECT id, MIN(CASE WHEN rate > 0 THEN score END) AS min_primary_score, MIN(CASE WHEN rate = 0 OR rate IS NULL THEN score END) AS min_secondary_score FROM abc GROUP BY id ORDER BY id;
逻辑说明
- 第一个
MIN(CASE...)仅筛选rate > 0(即Primary类型)的score,计算其最小值,不符合条件的行返回NULL,MIN函数会自动忽略NULL值 - 第二个
MIN(CASE...)筛选rate = 0或rate IS NULL(即Secondary类型)的score,计算其最小值 - 最终按
id分组,每个ID仅返回一行,完美匹配宽格式输出需求
当前输出(长格式)
| id | min_score | Primary_Secondary |
|---|---|---|
| 12 | 24 | Primary |
| 12 | 0 | Secondary |
期望输出(宽格式)
| id | min_primary_score | min_secondary_score |
|---|---|---|
| 12 | 24 | 0 |
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

