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

多事件类型下按账户统计distinct user_id的SQL查询问题求助

多事件类型下的Distinct User ID统计问题解决方法

你当前的查询存在两个关键问题:

  • 多个CASE语句之间缺少逗号分隔,会直接触发语法错误
  • 把COUNT(DISTINCT)嵌套在CASE内部的写法,会因为GROUP BY account_name的作用,统计的是全表符合条件的用户数,而非对应事件类型下的独立用户数

正确实现方式

使用条件聚合,将CASE逻辑嵌入COUNT(DISTINCT)内部,就能针对每个事件类型单独统计对应账户下的独立用户数:

SELECT 
    account_name,
    COUNT(DISTINCT CASE WHEN event_text = 'birthday' THEN user_id END) AS birthday_unique_users,
    COUNT(DISTINCT CASE WHEN event_text = 'wedding' THEN user_id END) AS wedding_unique_users
FROM 
    `table`
GROUP BY 
    account_name

逻辑说明

  • 每个COUNT(DISTINCT ...)中的CASE语句,只会保留对应事件类型的user_id,其他情况返回NULL;而COUNT函数会自动忽略NULL值,以此实现按事件过滤后的独立用户统计
  • 通过AS给每个统计字段设置别名,能让结果更易识别

优化建议(可选)

如果只需要统计指定的几种事件,可以添加WHERE条件缩小扫描范围,提升查询效率:

SELECT 
    account_name,
    COUNT(DISTINCT CASE WHEN event_text = 'birthday' THEN user_id END) AS birthday_unique_users,
    COUNT(DISTINCT CASE WHEN event_text = 'wedding' THEN user_id END) AS wedding_unique_users
FROM 
    `table`
WHERE 
    event_text IN ('birthday', 'wedding')
GROUP BY 
    account_name

内容的提问来源于stack exchange,提问作者j.lea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:31:18