SQL按筛选器对组外的项进行计数
假设我有下表:SQL按筛选器对组外的项进行计数,sql,sql-server,select,count,group-by,Sql,Sql Server,Select,Count,Group By,假设我有下表: Product A Product B Water Soda Water Soda Water Eggs Water Apples 我试图计算产品组合和每个产品的数量,因此我的结果是: Product A Product B Combination Product A Count Product B Count Water Soda 2
Product A Product B
Water Soda
Water Soda
Water Eggs
Water Apples
我试图计算产品组合和每个产品的数量,因此我的结果是:
Product A Product B Combination Product A Count Product B Count
Water Soda 2 4 2
Water Eggs 1 4 1
Water Apples 1 4 1
不幸的是,一旦我将产品分组,我就无法获得单个计数。任何帮助都将不胜感激
SELECT [ProductA], [ProductB], Count(*) as ComboCount
FROM [ProductCombinations]
GROUP BY [ProductA], [ProductB]
Order by ComboCount Desc
您可以独立计算每个产品的数量,并将其加入当前查询:
SELECT p.[ProductA], p.[ProductB], COUNT(*) As CombotCount,
ProductA_Count, ProductB_Count
FROM [ProductCombinations] p
JOIN (SELECT [ProductA], COUNT(*) AS ProductA_Count
FROM [ProductCombinations]
GROUP BY [ProductA]) a ON p.[ProductA] = a.[ProductA]
JOIN (SELECT [ProductB], COUNT(*) AS ProductB_Count
FROM [ProductCombinations]
GROUP BY [ProductB]) a ON p.[ProductA] = b.[ProductB]
GROUP BY [ProductA], [ProductB]
ORDER BY ComboCount DESC
子查询可以做到这一点。
(i代表“内部”,o代表“外部”)
这很好用,很干净,我认为:
SELECT DISTINCT [Product A], [Product B],
COUNT(*) OVER (PARTITION BY [Product A], [Product B]) ComboCount,
COUNT(*) OVER (PARTITION BY [Product A]) [Product A Count],
COUNT(*) OVER (PARTITION BY [Product B]) [Product B Count]
FROM [ProductCombinations]
ORDER BY ComboCount DESC
SELECT DISTINCT [Product A], [Product B],
COUNT(*) OVER (PARTITION BY [Product A], [Product B]) ComboCount,
COUNT(*) OVER (PARTITION BY [Product A]) [Product A Count],
COUNT(*) OVER (PARTITION BY [Product B]) [Product B Count]
FROM [ProductCombinations]
ORDER BY ComboCount DESC