SQL 服务器:获取总和聚合的最大值和最小值

SQL Server : getting the max and min of a sum aggregate

我有一个带有 ProductID 的产品订单列表和订购数量。

例如:

ProductID Quantity
------------------
 1         5
 2         2
 3         5
 1         2
 3         4
 2         8

如何只获取 SQL 服务器中销量最高和销量最低的产品的 ProductID。我试过了:

SELECT ProductID, SUM(Quantity) AS Total
FROM [Order Details]
GROUP BY ProductID
ORDER BY Total DESC

现在只需要 Total 的最大值和最小值。

使用普通的 table 表达式或派生的 table 得到 sum,然后查询 minmax:

WITH CTE AS
(
    SELECT ProductID, sum(Quantity) as Total
    FROM [Order Details]
    GROUP BY ProductID
)

SELECT MIN(Total) As Lowest, MAX(Total) AS highest
FROM CTE

我们可以尝试在这里使用 ROW_NUMBER 两次:

WITH cte AS (
    SELECT ProductID, SUM(Quantity) AS Total,
        ROW_NUMBER() OVER (ORDER BY SUM(Quantity)) rn_least,
        ROW_NUMBER() OVER (ORDER BY SUM(Quantity) DESC) rn_greatest
    FROM [Order Details]
    GROUP BY ProductID
)

SELECT
    ProductID,
    CASE WHEN rn_least = 1
         THEN 'least' ELSE 'GREATEST' END AS label,
    Total
FROM cte
WHERE
    rn_least = 1 OR rn_greatest = 1
ORDER BY
    Total;