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

SQL技术求助:如何将同一customer_key的多响应记录合并为单行

问题描述

我正在基于其他数据源创建新表,用来存储与customer_key对应的客户响应数据。同一customer_key会根据不同响应类型(比如消息被打开或点击)生成多条独立记录。现在我的SQL语句处理同时有打开和点击响应的客户时,会生成两行结果,但我希望合并成一行,清晰展示该客户是否打开(Opened)和点击(Clicked)的状态。

Response_table数据

campaign_keycustomer_keyresponse_code
42d28dc811110205
42d28dc811111205
42d28dc811110204

尝试的SQL代码

SELECT
    DISTINCT(customer_key)
    ,(CASE WHEN response_code IN ('10204','11204') THEN 1 ELSE 0 END) AS OPENED
     ,(CASE WHEN response_code IN ('10205','11205') THEN 1 ELSE 0 END) AS CLICKED
    FROM Response_table
    WHERE campaign_key = '42d28dc8'
    AND customer_ref_key = '111'

期望结果

customer_keyOpenedClicked
11111

实际得到的结果

customer_keyOpenedClicked
11110
11101
解决方案

问题根源是没有对customer_key做分组聚合,DISTINCT仅能去重,无法合并不同行的状态值。需要用聚合函数MAX()提取每个客户的响应状态——只要该客户有任意一条记录匹配响应类型,MAX()就会返回1,否则为0。

修改后的SQL代码:

SELECT
    customer_key,
    MAX(CASE WHEN response_code IN ('10204','11204') THEN 1 ELSE 0 END) AS Opened,
    MAX(CASE WHEN response_code IN ('10205','11205') THEN 1 ELSE 0 END) AS Clicked
FROM Response_table
WHERE campaign_key = '42d28dc8'
  AND customer_key = '111' -- 修正原代码字段名笔误,原写为customer_ref_key
GROUP BY customer_key;

代码说明

  • GROUP BY customer_key将同一客户的所有记录归为一组
  • MAX()函数在分组内取CASE表达式的最大值,确保只要存在对应响应就显示1
  • 修正了原代码中的字段名错误,否则会导致查询结果为空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:37:28