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

SQL查询多条件同时成立时如何用CASE语句返回单条结果

问题根因

原查询使用DISTINCT对userId、sessionId、conversion_index三个字段联合去重,当同一会话下同时存在pageType='confirm'和其他类型的页面记录时,会生成conversion_index值不同的两行数据,无法满足单会话单条结果的要求。

修正逻辑

按userId+sessionId维度分组聚合,只要组内存在任意一条pageType='confirm'的记录,conversion_index就返回yes,否则返回No,从根源上避免重复行。

修正后SQL(BigQuery原生写法,适配当前UNNEST语法)
SELECT
  userId,
  sessionId,
  CASE
    WHEN LOGICAL_OR(p.pageType = 'confirm') THEN 'yes'
    ELSE 'No'
  END AS conversion_index
FROM
  ccart.sessv6_79633508 AS sess,
  UNNEST(pages) p
WHERE
  sess.createdAt >= TIMESTAMP('2021-07-01')
  AND sess.createdAt <= TIMESTAMP('2021-10-11')
  AND userId = '206885636.2915067519'
  AND sessionId = 'GH178U'
GROUP BY userId, sessionId
通用兼容写法(适配所有支持标准SQL的引擎)

如果运行环境不支持LOGICAL_OR函数,可以替换为MAX条件判断的写法,效果完全一致:

SELECT
  userId,
  sessionId,
  CASE
    WHEN MAX(CASE WHEN p.pageType = 'confirm' THEN 1 ELSE 0 END) = 1 THEN 'yes'
    ELSE 'No'
  END AS conversion_index
FROM
  ccart.sessv6_79633508 AS sess,
  UNNEST(pages) p
WHERE
  sess.createdAt >= TIMESTAMP('2021-07-01')
  AND sess.createdAt <= TIMESTAMP('2021-10-11')
  AND userId = '206885636.2915067519'
  AND sessionId = 'GH178U'
GROUP BY userId, sessionId
  • 两种写法都去掉了原有的冗余嵌套子查询,直接在展开pages数组后做分组聚合,执行效率更高。
  • 分组逻辑严格按照userId和sessionId两个维度聚合,保证每个用户会话组合仅返回一条结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:51:19