Oracle SQL:按分组查询某列最小值对应的全量行数据
分组查询最小值对应整行数据解决方案
针对按COL 1分组,提取每个分组中COL3最小值对应整行数据的需求,提供以下几种常用SQL实现方案:
方法1:子查询关联查询
先通过子查询统计每个分组的COL3最小值,再关联原表匹配出对应的整行数据,兼容绝大多数数据库版本。
SELECT t1.* FROM your_table t1 INNER JOIN ( SELECT `COL 1`, MIN(COL3) AS min_col3 FROM your_table GROUP BY `COL 1` ) t2 ON t1.`COL 1` = t2.`COL 1` AND t1.COL3 = t2.min_col3;
方法2:窗口函数(推荐)
适用于支持窗口函数的数据库(如MySQL 8.0+、PostgreSQL、SQL Server等),通过给分组内的行按COL3排序,直接筛选出排名第一的行。
SELECT `COL 1`, `COl 2`, COL3 FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY `COL 1` ORDER BY COL3 ASC) AS rn FROM your_table ) sub WHERE rn = 1;
- 若同一分组内存在多个
COL3值相同的最小值行,使用RANK()或DENSE_RANK()替换ROW_NUMBER(),可保留所有符合条件的行。
方法3:WHERE子查询匹配
通过关联子查询直接匹配当前行所在分组的COL3最小值,写法简洁直观。
SELECT * FROM your_table t WHERE COL3 = ( SELECT MIN(COL3) FROM your_table WHERE `COL 1` = t.`COL 1` );
内容的提问来源于stack exchange,提问作者Alan Seed
相关产品推荐
相关产品推荐

