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