SQL按ID分组查询:非999取最大值否则取999的实现方法
SQL查询解决方案
适用场景说明
你需要对按ID分组的数据集做条件聚合,规则如下:
- 分组内存在非999的Value时,返回非999Value的最大值
- 分组内所有Value均为999时,返回999
通用查询语句
假设你的表名为your_table,可根据实际场景修改表名、字段名:
若Value为字符串类型(保留前导零)
SELECT ID, COALESCE(MAX(CASE WHEN Value != '999' THEN Value END), '999') AS Value FROM your_table GROUP BY ID ORDER BY ID;
若Value为数值类型
SELECT ID, COALESCE(MAX(CASE WHEN Value != 999 THEN Value END), 999) AS Value FROM your_table GROUP BY ID ORDER BY ID;
逻辑说明
- CASE表达式会将所有等于999的Value转为NULL,非999的Value保留原值
- MAX聚合函数会自动忽略NULL值:分组内存在非999值时会自动取最大值,全为999时聚合结果为NULL
- COALESCE是SQL标准函数,支持所有主流数据库,会将NULL结果替换为999,完全匹配需求规则
验证结果
执行上述语句后输出结果和你给出的预期完全一致:
| ID | Value |
|---|---|
| 1 | 005 |
| 2 | 003 |
| 3 | 999 |
内容的提问来源于stack exchange,提问作者Italo Rodrigo
相关产品推荐
相关产品推荐

