获取总缺陷数量最大的缺陷类型
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
我有以下查询,它获取每个缺陷类型的缺陷数量总和:
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