如何编写SQL的CASE语句判断指定条目对应列存在多个不同值?
实现方法
可以通过分组聚合结合CASE语句来实现需求,核心逻辑是先统计每个水果对应的不同颜色数量,再根据数量判断返回值:
基础分组实现(适合只需要水果和结果颜色的场景)
SELECT fruit, CASE WHEN COUNT(DISTINCT color) > 1 THEN 'Multiple' ELSE MAX(color) END AS color FROM your_table GROUP BY fruit;
窗口函数实现(适合需要保留原表其他字段的场景)
如果原表还有其他需要保留的字段,可以用窗口函数避免丢失数据:
SELECT DISTINCT fruit, -- 可添加原表其他需要保留的字段 CASE WHEN COUNT(DISTINCT color) OVER (PARTITION BY fruit) > 1 THEN 'Multiple' ELSE MAX(color) OVER (PARTITION BY fruit) END AS color FROM your_table;
逻辑说明
COUNT(DISTINCT color):统计每个水果对应的不同颜色的数量,避免重复颜色干扰计数- 当数量大于1时,说明该水果对应多种颜色,返回
'Multiple' - 当数量等于1时,用
MAX(color)(或MIN(color))取出唯一的颜色值,此时聚合函数不会改变结果
内容的提问来源于stack exchange,提问作者Keena
相关产品推荐
相关产品推荐

