首页 > 解决方案 > 拆分和合并列中唯一的 SQL 逗号分隔值,然后分组

问题描述

我正在尝试编写一个 SQL 查询来帮助我找出出现在特定列中的唯一数量的“数字”。例如,在一个 select * 查询中,我想要的列可以是这样的

Num_Option
9000
9001
9000,9001,9002
8080
8080,8000,8553

然后我有另一个“date_available”字段,它是一个日期/时间。

基本上,想要的是我可以按“date_available”分组的东西,同时结合该日期的所有Num_Options,所以像这样..

Num_Option                        date_available
9000,9001,9002,8080                 10/22/2020
9000,9002,8080,8000,8553            10/23/2020

我正在努力解决这个问题。我已经到了使用 python 脚本和 matplotlib 代替的可能点......但我希望也有一种 SQL 方法来处理这个问题。

标签: sqlstringpostgresqlamazon-redshiftaggregate-functions

解决方案


在 Postgres 中,您可以使用regexp_split_to_table()横向连接将 csv 元素转换为行,然后string_agg()按日期聚合:

select string_agg(x.num, ',') num_option, t.date_available
from mytable t
cross join lateral regexp_split_to_table(t.num_option, ',') x(num)
group by date_available

当然,这里假设你想避免在同一数据上出现重复的nums(否则就不需要拆分了,你可以直接聚合)。


推荐阅读