SQL Server如何统计两列的所有组合出现次数(含重复组合)
SQL Server 统计两列组合出现次数并添加新列的实现方案
方案一:查询时动态生成计算列(无需修改表结构,适合临时查询场景)
直接使用窗口函数按两列分组统计次数,不需要改动原表结构:
SELECT Product1, Product2, COUNT(*) OVER (PARTITION BY Product1, Product2) AS BoughtTogether FROM OrderedTogether;
方案二:持久化添加新列到原表(统计结果永久保存)
如果需要把统计结果写入原表存储,执行以下两步:
- 先为表新增
BoughtTogether字段,类型设置为INT:
ALTER TABLE OrderedTogether ADD BoughtTogether INT;
- 更新新列的统计值,有两种写法可选:
- 写法1:关联分组统计子查询更新
UPDATE t1 SET t1.BoughtTogether = t2.CombinationCount FROM OrderedTogether t1 INNER JOIN ( SELECT Product1, Product2, COUNT(*) AS CombinationCount FROM OrderedTogether GROUP BY Product1, Product2 ) t2 ON t1.Product1 = t2.Product1 AND t1.Product2 = t2.Product2;
- 写法2:CTE+窗口函数更新(SQL Server 2008及以上版本支持,语法更简洁)
WITH CountCTE AS ( SELECT BoughtTogether, COUNT(*) OVER (PARTITION BY Product1, Product2) AS CombinationCount FROM OrderedTogether ) UPDATE CountCTE SET BoughtTogether = CombinationCount;
内容的提问来源于stack exchange,提问作者user17201492
相关产品推荐
相关产品推荐

