You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中多列=1的OR条件能否简化?已尝试HAVING和IN无效

简化多列OR条件的SQL写法

你可以通过判断这些列的总和是否大于0,或者取最大值是否等于1来简化OR条件,以下是两种可行的写法:

方法1:用SUM判断至少一列等于1

(count(distinct case when (fiscal_mth_idnt_june21 + fiscal_mth_idnt_july21 + fiscal_mth_idnt_august21) > 0 then contact_key end)) / sum(fiscal_mth_idnt_may21)*100 as within_three_months

如果这些列的取值只有0和1,那么只要它们的和大于0,就说明至少有一个列等于1,和原来的OR逻辑完全一致。

方法2:用GREATEST函数取最大值

(count(distinct case when GREATEST(fiscal_mth_idnt_june21, fiscal_mth_idnt_july21, fiscal_mth_idnt_august21) = 1 then contact_key end)) / sum(fiscal_mth_idnt_may21)*100 as within_three_months

GREATEST会返回这几个列中的最大值,只要最大值是1,就意味着至少有一个列等于1,同样符合原逻辑。

为什么IN和HAVING没用?

  • IN是用来判断单个列的值是否在某个集合里,比如column IN (1,2,3),但你这里是多个不同的列,所以IN不适用。
  • HAVING是用来过滤分组后的结果,而你的条件是在CASE WHEN里判断行级的列值,所以HAVING也帮不上忙。

内容的提问来源于stack exchange,提问作者live_happillyagain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:20:35