在SQL Server中基于其他列条件查询某列的最大值与最小值
基于条件查询某列的最大值和最小值(SQL Server)
结合你提供的临时表#Table1,我整理了几种常见场景的实现方案,直接就能套用:
首先先补全你的临时表完整代码(方便后续示例测试):
CREATE TABLE #Table1 ( [RowID] INT NOT NULL PRIMARY KEY IDENTITY(1, 1) , [Column1] BIGINT NOT NULL , [Column2] CHAR(10) NOT NULL , [Column3] CHAR(5) NOT NULL , [Amount] NUMERIC(16, 4) NOT NULL DEFAULT 0.0000 , [SequenceNumber] INT NOT NULL , [SequenceType] CHAR(1) NOT NULL ) INSERT INTO #Table1 VALUES (1, '62546J307', '00963', 50019.0000, 1, 'P'); INSERT INTO #Table1 VALUES (1, '62546J307', '00963', 50021.0000, 2, 'P'); INSERT INTO #Table1 VALUES (2, '62546J307', '00963', 30000.0000, 1, 'P'); INSERT INTO #Table1 VALUES (2, '62546J307', '00963', 40000.0000, 2, 'S');
1. 全表无筛选的最大/最小值
如果只是想获取整个表中Amount列的极值,直接用聚合函数即可:
SELECT MAX(Amount) AS MaxAmount, MIN(Amount) AS MinAmount FROM #Table1;
2. 单条件筛选后的最大/最小值
比如你需要只统计SequenceType = 'P'的记录中Amount的最值:
SELECT MAX(Amount) AS MaxAmount_P, MIN(Amount) AS MinAmount_P FROM #Table1 WHERE SequenceType = 'P';
3. 多列分组后的组内最值
这应该是你场景里最常用的情况——按Column1、Column2、Column3分组,查询每组内Amount的极值:
SELECT Column1, Column2, Column3, MAX(Amount) AS GroupMaxAmount, MIN(Amount) AS GroupMinAmount FROM #Table1 -- 按需添加全局筛选条件,比如只看SequenceType为P的分组 -- WHERE SequenceType = 'P' GROUP BY Column1, Column2, Column3;
4. 分组内带条件的最值
如果要在分组里只针对SequenceType = 'P'的记录计算最值,可以用CASE语句配合聚合函数:
SELECT Column1, Column2, Column3, MAX(CASE WHEN SequenceType = 'P' THEN Amount END) AS GroupMaxAmount_P, MIN(CASE WHEN SequenceType = 'P' THEN Amount END) AS GroupMinAmount_P FROM #Table1 GROUP BY Column1, Column2, Column3;
你可以根据实际业务需求,调整筛选条件或者分组字段~
内容的提问来源于stack exchange,提问作者Saaif




