CASE WHEN无ELSE默认返回NULL,如何过滤a大于30的对应行?
实现方案
你可以通过两种常见方式实现需求:
方案1:WHERE层提前过滤(推荐)
直接在查询的WHERE条件中排除不符合要求的行,避免CASE语句生成NULL值,性能更优:
SELECT CASE WHEN a < 10 AND a != 0 THEN a WHEN a > 10 AND a < 30 THEN b END AS value_a FROM 你的表名 -- 若a=10也属于需要过滤的范围,可将条件调整为 (a < 10 AND a != 0) OR (a > 10 AND a < 30) WHERE a <= 30
方案2:外层过滤NULL值
如果你不方便调整原查询的WHERE条件,可以嵌套一层查询过滤掉返回NULL的行:
SELECT value_a FROM ( SELECT CASE WHEN a < 10 AND a != 0 THEN a WHEN a > 10 AND a < 30 THEN b END AS value_a FROM 你的表名 ) AS sub_query WHERE value_a IS NOT NULL
注意说明
你当前的CASE逻辑没有覆盖a=10的场景,如果a等于10也属于有效范围,调整第二个WHEN条件为WHEN a >= 10 AND a < 30即可。
内容的提问来源于stack exchange,提问作者user3495160
相关产品推荐
相关产品推荐

