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

交易数据按客户聚合触达方式次数的SQL实现问题问询

解决按客户ID统计触达方式次数的SQL问题

看来你在尝试统计客户不同触达方式的次数时遇到了SQL报错的问题,我来帮你梳理下问题所在,再给出靠谱的解决方案。

首先咱们先拆解你原有SQL里的问题:

  • 表名拼写失误:d.emai应该是d.email(大概率是手滑打错了)
  • 子查询逻辑错误:having SolicitMethod = 'Email'用法不对,HAVING是用来过滤聚合后的结果的,而SolicitMethod是每行的字段,要筛选特定触达方式应该用WHERE
  • 整体绕了远路:不需要嵌套子查询,用条件聚合就能一次性生成你需要的两列统计结果,效率还更高

正确解决方案:条件聚合

要实现按客户ID聚合,分别统计电话、邮件的触达次数,最直接的方法是用CASE表达式配合聚合函数(COUNT或SUM)做条件计数:

方法1:使用COUNT + CASE

CREATE TABLE d.customer_contact_summary AS
SELECT 
    ID,
    -- 统计邮件触达次数:仅当触达方式为Email时计数,自动忽略NULL
    COUNT(CASE WHEN SolicitMethod = 'Email' THEN 1 END) AS email_count,
    -- 统计电话触达次数:仅当触达方式为Phone时计数
    COUNT(CASE WHEN SolicitMethod = 'Phone' THEN 1 END) AS phone_count
FROM d.original_transaction_data -- 替换成你的原始交易数据表名
GROUP BY ID;

方法2:使用SUM + CASE

另一种等价的写法是用SUM,匹配触达方式时返回1,否则返回0,求和后就是对应次数:

CREATE TABLE d.customer_contact_summary AS
SELECT 
    ID,
    SUM(CASE WHEN SolicitMethod = 'Email' THEN 1 ELSE 0 END) AS email_count,
    SUM(CASE WHEN SolicitMethod = 'Phone' THEN 1 ELSE 0 END) AS phone_count
FROM d.original_transaction_data
GROUP BY ID;

逻辑说明

  • GROUP BY ID:将同一客户ID的所有行聚合为一行
  • CASE WHEN ... THEN 1 END:针对每行判断触达方式,匹配时返回1,不匹配时返回NULL(COUNT会忽略)或0(SUM累加不影响结果)
  • 最终每个客户ID对应一行,包含各自的邮件、电话触达次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:53:48