sql - 特定列的所有值组合的频率
问题描述
我在 SQL Server 2012 中有一个数据集,其中包含 id 和 value 列,如下所示:
[id] [value]
--------------
A 15
A 11
A 11
B 13
B 15
B 12
C 12
C 13
D 13
D 12
我的目标是获取 [value] 的所有组合的频率计数,但有两个警告:
顺序无所谓,所以 [11,12,15] 不与 [12,11,15] 分开计算
重复值是分开计算的,所以[11,11,12,15]和[11,12,15]分开计算
我对任何长度的所有组合都感兴趣(不仅仅是对)
所以结果看起来像:
[combo] [frequency]
---------------------
11,11,15 1
12,13,15 1
12,13 2
我在这里看到了涉及递归的答案,这些答案回答了类似的问题,但顺序很重要,而这里的答案涉及到产生成对组合的自联接。这些接近但我不太确定如何适应我的特定需求。
解决方案
您可以使用string_agg()
:
select vals, count(*) as frequency
from (select string_agg(value, ',') within group (order by value) as vals, id
from t
group by id
) i
group by vals;
SQL Server 2012 不支持string_agg()
,但您可以使用 XML hack:
select vals, count(*) as frequency
from (select id,
stuff( (select concat(',', value)
from t t2
where t2.id = i.id
for xml path ('')
), 1, 1, ''
) as vals
from (select distinct id from t) i
) i
group by vals;
推荐阅读
- java - 删除数组中两个或多个以 6 结尾的连续数字
- php - Ifile 没有上传到数据库中
- entity-framework-core - 使用 DbContext 实现 Enity Framework 1.1 时出错
- python - 面对 TypeError:未绑定的方法 setUpClass() 必须使用 HomePageTest 实例作为第一个参数调用(什么都没有)
- kubernetes - 无法使用 Kubernetes Google Compute Platform 中其他节点已使用的现有持久卷
- python - 无法调整 QTableWidget 的大小
- html - 全选
后
- sql - SQL Server x10 数量检查
- git - 无法检出/合并已被忽略的文件
- javascript - 圆环图中的过渡颜色