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

Redshift SQL中Split_part无法获取完整数据的问题求助

拆分逗号分隔字段并统计每个元素的出现次数

你现在的问题是原SQL仅能提取triggered_signatures中的第一个值,要实现预期的统计,需要把逗号分隔的字符串拆分成独立行后再分组计算。针对PostgreSQL环境(从你的表结构和函数使用判断),可以通过数组转换+行展开的方式解决:

修正后的SQL语句

SELECT 
    b.account_id, 
    b.app_name, 
    unnest(string_to_array(b.triggered_signatures, ',')) AS triggered_signatures,
    COUNT(DISTINCT b.event_id) AS cnt
FROM "public"."bus_request" b
WHERE b.date > CURRENT_DATE - 2 AND b.date < CURRENT_DATE - 1
GROUP BY b.account_id, b.app_name, triggered_signatures
ORDER BY b.account_id, b.app_name, triggered_signatures;

核心逻辑解释

  • string_to_array(b.triggered_signatures, ','):把逗号分隔的字符串转为PostgreSQL数组,比如'111,222,333'会变成['111','222','333']
  • unnest(...):将数组的每个元素拆分为单独的行,原来的1条数据会被拆分为N行(N等于签名的数量),每一行对应一个独立签名
  • 最后按account_id、app_name和拆分后的单个签名分组,用COUNT(DISTINCT b.event_id)统计每个组合的独立事件数,和你原需求保持一致

用你提供的示例数据测试,这个SQL会输出完全符合预期的结果:

account_id app_name triggered_signatures cnt
aaaa bbbb 111 2
aaaa bbbb 222 2
aaaa bbbb 333 1
aaaa bbbb 444 1
yyyy xxxx 111 2
yyyy xxxx 222 2
yyyy xxxx 444 1
yyyy xxxx 555 1

注:我把Getdate()换成了PostgreSQL标准的CURRENT_DATE,如果你的数据库环境(比如SQL Server)确实支持Getdate(),可以换回原写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:53:16