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

SQL分组查询存在BOOLEAN TRUE值时仅返回TRUE的实现方法

问题原因

你当前返回两行结果的核心原因如下:

  • GROUP BY 子句中错误加入了逐行计算的PRICE_IND字段,只要同一id+date维度下同时存在匹配关键词、不匹配关键词的记录,就会拆分为TRUE、FALSE两行
  • 逻辑上没有做组内聚合判断,只是逐行打标签后分组,无法实现“组内存在至少一个TRUE则整体返回TRUE”的需求
  • 原SQL的WHERE子句存在语法错误,多写了一个冗余的AND关键字
实现方案

通用兼容写法(支持所有SQL数据库)

分组维度仅保留id、date,通过聚合函数统计组内符合条件的记录数,只要计数大于0就返回TRUE:

SELECT 
  id, 
  date,
  CASE WHEN 
    SUM(
      CASE WHEN 
        ITEM_DESC LIKE '%low_price%' OR 
        ITEM_DESC LIKE '%medium%' OR 
        ITEM_DESC LIKE '%high%' OR
        ITEM_DESC LIKE '%cheap%'
      THEN 1 ELSE 0 END
    ) > 0 THEN 'TRUE' ELSE 'FALSE' END AS PRICE_IND,
  'TRUE' AS EXPECTED_RESULT      
FROM table_1 A
JOIN table_2 C
  ON A.price_ind_id = C.price_ind_id
JOIN table_3 U
  ON C.price_ind_id=U.price_ind_id
WHERE id='129342'
GROUP BY id, date;

逻辑说明:

  • 内层CASE逐行判断ITEM_DESC是否匹配关键词,匹配记为1、不匹配记为0
  • SUM对组内所有记录的标记值求和,结果大于0即代表组内至少有1条符合条件的记录,外层CASE直接返回'TRUE',否则返回'FALSE'
  • 去掉了冗余的DISTINCT关键字,GROUP BY本身就会实现按分组维度去重的效果,额外加DISTINCT会增加不必要的计算开销

简洁写法(支持PostgreSQL/Redshift/BigQuery等支持布尔聚合的数据库)

如果你的数据库支持BOOL_OR聚合函数,可以直接用该函数实现组内“存在即真”的判断,写法更简洁:

SELECT 
  id, 
  date,
  CASE WHEN 
    BOOL_OR(
      ITEM_DESC LIKE '%low_price%' OR 
      ITEM_DESC LIKE '%medium%' OR 
      ITEM_DESC LIKE '%high%' OR
      ITEM_DESC LIKE '%cheap%'
    ) THEN 'TRUE' ELSE 'FALSE' END AS PRICE_IND,
  'TRUE' AS EXPECTED_RESULT      
FROM table_1 A
JOIN table_2 C
  ON A.price_ind_id = C.price_ind_id
JOIN table_3 U
  ON C.price_ind_id=U.price_ind_id
WHERE id='129342'
GROUP BY id, date;

BOOL_OR的逻辑为:组内只要有1条记录满足括号内的判断条件,就返回布尔TRUE,所有记录都不满足才返回FALSE,完全匹配你的需求。

预期返回结果

执行上述语句后,会按照要求返回单条结果:

RowIDDATEPRICE_INDEXPECTED_RESULT
11293422021-10-02TRUETRUE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:42:19