You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中如何在单查询内获取SUM的MAX与MIN值

在SQL Server中获取分组求和后的最大/最小值并同行展示

你可以通过CTE(公共表表达式)+ 子查询或者窗口函数+条件聚合的方式,在单个查询里得到分组求和后的最大、最小值及其关联的CustomCuttingOrder字段,且结果在同一行展示。

方法一:CTE + 子查询

先计算每个CustomCuttingOrder的求和值,再通过子查询分别提取最大、最小值对应的字段及数值:

WITH GroupedSums AS (
    SELECT 
        CustomCuttingOrder,
        SUM(YourSumColumn) AS TotalSum  -- 替换成你实际需要求和的列名
    FROM CustomCuttingOrder
    WHERE manufacturingOrder = '1368289'
    GROUP BY CustomCuttingOrder
)
SELECT
    -- 获取求和值最大的CustomCuttingOrder及对应数值
    (SELECT TOP 1 CustomCuttingOrder FROM GroupedSums ORDER BY TotalSum DESC) AS Max_CuttingOrder,
    MAX(TotalSum) AS Max_TotalSum,
    -- 获取求和值最小的CustomCuttingOrder及对应数值
    (SELECT TOP 1 CustomCuttingOrder FROM GroupedSums ORDER BY TotalSum ASC) AS Min_CuttingOrder,
    MIN(TotalSum) AS Min_TotalSum
FROM GroupedSums;

方法二:窗口函数 + 条件聚合

通过ROW_NUMBER()给求和值排序,再用条件聚合将最大、最小行的字段合并到同一行:

WITH GroupedSums AS (
    SELECT 
        CustomCuttingOrder,
        SUM(YourSumColumn) AS TotalSum,
        -- 按求和值降序排名,第一行就是最大值
        ROW_NUMBER() OVER(ORDER BY SUM(YourSumColumn) DESC) AS Rank_Desc,
        -- 按求和值升序排名,第一行就是最小值
        ROW_NUMBER() OVER(ORDER BY SUM(YourSumColumn) ASC) AS Rank_Asc
    FROM CustomCuttingOrder
    WHERE manufacturingOrder = '1368289'
    GROUP BY CustomCuttingOrder
)
SELECT
    MAX(CASE WHEN Rank_Desc = 1 THEN CustomCuttingOrder END) AS Max_CuttingOrder,
    MAX(TotalSum) AS Max_TotalSum,
    MAX(CASE WHEN Rank_Asc = 1 THEN CustomCuttingOrder END) AS Min_CuttingOrder,
    MIN(TotalSum) AS Min_TotalSum
FROM GroupedSums;

为什么原来的UNION方式不生效?

你之前用UNION合并两个TOP 1查询,会得到两行结果(一行最大值、一行最小值),但你的需求是把这两个结果的字段合并到同一行,所以UNION不符合场景,需要用子查询或条件聚合的方式来整合字段。

注意:记得把代码中的YourSumColumn替换成你表中实际需要求和的列名。

内容的提问来源于stack exchange,提问作者SistJortu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:50:34