SQL Server中求最大值的方法-SQL Server服务中心-电脑网络-本牛千智丨专注WorkFine开发

SQL Server中求最大值的方法


📌 两种场景的区别

场景描述使用函数
行内最大值同一行的多列之间比较GREATEST()
跨行最大值多行之间比较(聚合)MAX()
多行多列最大值整个表或多个列的多行数据中找最大值组合使用

🔍 多行多列求最大值的几种方案

方案一:整个表中多列所有行的最大值

如果你想找出整个表中 Col1、Col2、Col3 所有数据的最大值

SELECT MAX(AllValues) AS GlobalMax
FROM (
    SELECT Col1 AS AllValues FROM YourTable
    UNION ALL
    SELECT Col2 FROM YourTable
    UNION ALL
    SELECT Col3 FROM YourTable
) AS Tmp;

或者使用 VALUES(更简洁):

SELECT MAX(Val) AS GlobalMax
FROM YourTable
CROSS APPLY (VALUES (Col1), (Col2), (Col3)) AS Tmp(Val);

方案二:按分组求多行多列的最大值

如果你需要按某个字段分组,每组内求多列的最大值:

SELECT 
    GroupCol,
    MAX(Val) AS GroupMax
FROM YourTable
CROSS APPLY (VALUES (Col1), (Col2), (Col3)) AS Tmp(Val)
GROUP BY GroupCol;

方案三:先求行内最大值,再求跨行最大值

分两步:先用 GREATEST 求每行的最大值,再用 MAX 求所有行的最大值。

-- SQL Server 2022+
SELECT MAX(GREATEST(Col1, Col2, Col3)) AS GlobalMax
FROM YourTable;
-- SQL Server 2019 及更早版本
SELECT MAX(RowMax) AS GlobalMax
FROM (
    SELECT 
        (SELECT MAX(Val) FROM (VALUES (Col1), (Col2), (Col3)) AS Tmp(Val)) AS RowMax
    FROM YourTable
) AS SubQuery;

📊 完整示例对比

假设表数据如下:

IDCol1Col2Col3
1102515
230520
381250
-- 1. 每行的最大值(行内)
SELECT ID, GREATEST(Col1, Col2, Col3) AS RowMax FROM YourTable;
-- 结果:1→25, 2→30, 3→50

-- 2. 整个表所有列的最大值(跨行+跨列)
SELECT MAX(Val) AS GlobalMax
FROM YourTable
CROSS APPLY (VALUES (Col1), (Col2), (Col3)) AS Tmp(Val);
-- 结果:50

-- 3. 先求行内最大,再求跨行最大
SELECT MAX(GREATEST(Col1, Col2, Col3)) AS GlobalMax FROM YourTable;
-- 结果:50

✅ 总结

需求推荐方法
同行多列最大值GREATEST(Col1, Col2, Col3)
单列跨行最大值MAX(Col1)
多行多列全局最大值CROSS APPLY + VALUES + MAXMAX(GREATEST(...))
分组后多行多列最大值CROSS APPLY + VALUES + GROUP BY

核心区别

  • GREATEST = 横向比较(同一行,多列)
  • MAX = 纵向比较(同一列,多行)
  • 多行多列 = 先横向再纵向,或先转成单列再纵向聚合

PS:最小值也是同理的

请登录后发表评论

    请登录后查看回复内容