获取总缺陷数量最大的缺陷类型

Get the Defect Type with the maximum Total Defect Qty

我有以下查询,它获取每个缺陷类型的缺陷数量总和:

SELECT 
[Defect Type]
,YEAR([Date]) AS YearOfDefect
,SUM([Total Defect Qty]) AS [Sum] FROM SupplierQuality
GROUP BY [Defect Type],YEAR([Date])

这是结果:

我想要总缺陷数量最大总和的缺陷类型,如下所示:

DefectType  YearOfDefect Sum    
No Impact   2019         586780230
No Impact   2018         437989564

一个简单的选项使用 with ties:

SELECT TOP (1) WITH TIES
    [Defect Type],
    YEAR([Date]) AS YearOfDefect,
    SUM([Total Defect Qty]) AS [Sum] 
FROM SupplierQuality
GROUP BY [Defect Type], YEAR([Date])
ORDER BY RANK() OVER(PARTITION BY YEAR([Date]) ORDER BY SUM([Total Defect Qty]) DESC)

缺点是您无法控制结果集的顺序。如果您确实需要该功能,请使用子查询:

SELECT *
FROM (
    SELECT
        [Defect Type],
        YEAR([Date]) AS YearOfDefect,
        SUM([Total Defect Qty]) AS [Sum],
         RANK() OVER(PARTITION BY YEAR([Date]) ORDER BY SUM([Total Defect Qty]) DESC) rn
    FROM SupplierQuality
    GROUP BY [Defect Type], YEAR([Date])
) t
WHERE rn = 1
ORDER BY YearOfDefect

根据我在评论中所做的假设,这是每年,然后您可以使用 ROW_NUMBER 获取每组的“顶部”行:

WITH CTE AS(
    SELECT [Defect Type],
           YEAR([Date]) AS YearOfDefect,
           SUM([Total Defect Qty]) AS [Sum]
    FROM SupplierQuality
    GROUP BY [Defect Type],
             YEAR([Date]))
SELECT TOP (1) WITH TIES
       [Defect Type],
       YearOfDefect,
       [Sum]
FROM CTE
ORDER BY ROW_NUMBER() OVER (PARTITION BY YearOfDefect ORDER BY [Sum] DESC);

另请参考另一种方法:

with cte
as(SELECT 
[Defect Type]
,YEAR([Date]) AS YearOfDefect
,SUM([Total Defect Qty]) AS [Sum] FROM SupplierQuality
GROUP BY [Defect Type],YEAR([Date]))
,cte2 as
(select YearOfDefect,max([Sum]) [Sum] 
from cte 
group by YearOfDefect)

select c1.[Defect Type],c2.YearOfDefect,c2.[Sum] 
from cte c1
join c2
on c1.[Defect Type]=c2.[Defect Type] and c1.YearOfDefect=c2.YearOfDefect