【问题标题】:SQL Server : getting the max and min of a sum aggregateSQL Server:获取总和聚合的最大值和最小值
【发布时间】:2019-08-03 23:28:19
【问题描述】:

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

例如:

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

如何仅获取 SQL SERVER 中销量最高和销量最低的产品的 ProductID。我试过了:

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

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

【问题讨论】:

    标签: sql-server sum max aggregate min


    【解决方案1】:

    使用公用表表达式或派生表获取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
    

    【讨论】:

      【解决方案2】:

      我们可以在这里尝试使用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;
      

      【讨论】:

        猜你喜欢
        • 2017-08-31
        • 2015-04-12
        • 1970-01-01
        • 2020-08-16
        • 2021-07-20
        • 1970-01-01
        • 2018-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多