sql - 拆分和合并列中唯一的 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 方法来处理这个问题。
解决方案
在 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(否则就不需要拆分了,你可以直接聚合)。
推荐阅读
- javascript - 阻止键盘从按钮按下弹出
- r - 如何根据三列删除重复项,但我使用 R 保留特定列中编号最高的行?
- java - 在Activity中保存ArrayList
- kubernetes-ingress - 访问在 Kubernetes 集群上使用 PingIdentity devops 部署的 Pingfederate 控制台时出现内部服务器错误
- flutter - 未选择 DropDownButton 项目
- node.js - 如何使用 Nodejs 将通行证保存到 Google Pay?
- amazon-cognito - Cognito 多租户用户池
- reactjs - 如何直接从 VSCode 运行和调试 React 应用程序?
- javascript - NextJS:如果不满足查询,如何转到另一个页面
- python-3.x - 如何在python中获取列的百分比与行的总和