sql - 在 SQL 中识别不同的行集
问题描述
我想唯一标识使用相同分组的行组。
例如,如果我们想象一些 epos 数据,我想识别购买了完全相同的商品组合的客户,并将它们全部与集合的定义相关联(参见下面的示例)。
这感觉像是一个窗口函数问题,但我仍在试图弄清楚如何使用它们来识别行的唯一组合,而不是按客户或项目进行分区。
在下面的示例中,我想将所有出现的只有红色和蓝色标识为集合 1,将绿色和黄色标识为集合 2 等。映射中的行/值的数量是无限的,因此旋转然后分组/连接不会是合适的。
解决这个问题的最简单方法是什么?
解决方案
最简单的方法实际上是字符串聚合。在标准 SQL 中,这看起来像:
select items,
listagg(customerid, ',') within group (order by customerid) as customerids,
row_number() over (order by items) as group_id
from (select customerid,
listagg(item, ',') within group (order by item) as items
from t
) c
group by items;
结果集与您指定的不完全一致,因为这些 id 组合在一行中。
编辑:
在 SQL Server 中,语法将使用string_agg()
:
select items,
string_agg(customerid, ',') within group (order by customerid) as customerids,
row_number() over (order by items) as group_id
from (select customerid,
string_agg(item, ',') within group (order by item) as items
from t
) c
group by items;
推荐阅读
- docker - 无法建立 Kafka 连接。经纪人可能不可用
- php - PHP无法连接到数据库
- javascript - 在 Next.js 中,序列化 getStaticProps 时出错?
- sql-server - 视图中的 MS SQL 事务
- python-3.x - 如何在 Python 中更新 GraphQL 请求中的变量?
- android - RecyclerView 在 Fragment 生命周期的哪个阶段准备就绪?
- javascript - 在 Swagger 上覆盖 onError 时如何在 Swagger_Controllers 中指定函数名称?
- ios - 如何通过点击笔尖中的按钮来显示警报?
- java - Logback 记录消息两次,无需使用 Spring 设置配置
- javascript - 如何在 GraphQL 突变中使用 FaunaDB 将数组传递给字段