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

求助:使用CASE语句将email_type=1的email1Opened与email1Sent合并为单行

调整后的SQL查询方案

没问题,我来帮你把查询调整成符合需求的样子。你当前的语句会根据每条记录生成一行结果,导致同一个用户的email1Opened和email1Sent可能分散在不同行里。要把这两个状态合并到同一行,我们可以用聚合函数+分组的方式来实现:

SELECT 
    user_id, 
    business_id,
    -- 只要有一条符合条件的open记录,就返回YES,否则NO
    MAX(CASE WHEN email_status = 'open' AND email_type = 1 THEN 'YES' ELSE 'NO' END) AS email1Opened,
    -- 只要有一条符合条件的sent记录,就返回YES,否则NO
    MAX(CASE WHEN email_status = 'Sent' AND email_type = 1 THEN 'YES' ELSE 'NO' END) AS email1Sent
FROM email_track 
WHERE business_id = 10
-- 按用户和业务ID分组,确保每个用户只显示一行
GROUP BY user_id, business_id;

为什么这么调整?

  • 聚合函数MAX():因为YES的字符串排序优先级比NO高,所以在同一个用户分组里,只要存在一条满足条件的记录,MAX()就会保留YES,否则返回NO,刚好实现“只要有过打开/发送行为就标记YES”的逻辑。
  • GROUP BY分组:通过user_id和business_id分组,确保每个用户(对应同一业务主体)的结果只出现在一行里。

如果你的场景里需要保留原查询中的id字段,由于每个分组可能对应多条记录的id,你可以用GROUP_CONCAT(id)来拼接所有相关id,或者根据业务需求选择某一个特定的id(比如最新的MAX(id))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:14:11