Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL按筛选器对组外的项进行计数_Sql_Sql Server_Select_Count_Group By - Fatal编程技术网

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