You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在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. 多列分组后的组内最值

这应该是你场景里最常用的情况——按Column1Column2Column3分组,查询每组内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

火山引擎 最新活动