SQL 按过滤器计算组外的项目
SQL count items outside of group by filter
假设我有以下 table:
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 代表 "inner",o 代表 "outer")
SELECT o.[ProductA], o.[ProductB], Count(*) as ComboCount,
(select count(*) from ProductCombinations.i where i.ProductA = o.ProductA) as ACount,
(select count(*) from ProductCombinations.i where i.ProductB = o.ProductB) as BCount
FROM [ProductCombinations] o
GROUP BY o.[ProductA], i.[ProductB]
Order by o.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
假设我有以下 table:
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 代表 "inner",o 代表 "outer")
SELECT o.[ProductA], o.[ProductB], Count(*) as ComboCount,
(select count(*) from ProductCombinations.i where i.ProductA = o.ProductA) as ACount,
(select count(*) from ProductCombinations.i where i.ProductB = o.ProductB) as BCount
FROM [ProductCombinations] o
GROUP BY o.[ProductA], i.[ProductB]
Order by o.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