基于Y值优先于N值的SQL分组聚合实现需求
解决方案
需求
按ID分组聚合:同一ID同时存在Y和N值时,优先输出Y;仅存在N值时输出N。
原始数据
| ID | Value |
|---|---|
| 1 | Y |
| 1 | N |
| 2 | N |
| 3 | Y |
| 4 | Y |
| 4 | N |
期望结果
| ID | Value |
|---|---|
| 1 | Y |
| 2 | N |
| 3 | Y |
| 4 | Y |
方法一:利用字符排序特性(简洁高效)
SELECT ID, MAX(Value) AS Value FROM your_table GROUP BY ID;
原理:字符Y的ASCII码(89)大于N(78),分组后取Value的最大值,会自动优先返回Y;当分组内只有N时,自然返回N。
方法二:显式条件判断(逻辑清晰)
可以用存在性判断:
SELECT ID, CASE WHEN EXISTS (SELECT 1 FROM your_table t2 WHERE t2.ID = t1.ID AND t2.Value = 'Y') THEN 'Y' ELSE 'N' END AS Value FROM your_table t1 GROUP BY ID;
也可以用计数统计:
SELECT ID, CASE WHEN SUM(CASE WHEN Value = 'Y' THEN 1 ELSE 0 END) > 0 THEN 'Y' ELSE 'N' END AS Value FROM your_table GROUP BY ID;
原理:通过判断分组内是否存在Y值,存在则返回Y,否则返回N,逻辑更直白,适合需要明确业务规则的场景。
内容的提问来源于stack exchange,提问作者MANISH
相关产品推荐
相关产品推荐

