提取对应列最小值/最大值的唯一行组合(SQL实现)
解决思路与SQL实现
针对你要提取TableTest表中Value列最大值和最小值对应所有行(包括重复最值的情况)的需求,我给你两种实用的解决方案:
方案一:子查询直接匹配全局最值
这种方法简单直观,适合快速实现需求:
SELECT t.* FROM TableTest t WHERE t.Value = (SELECT MAX(Value) FROM TableTest) OR t.Value = (SELECT MIN(Value) FROM TableTest);
说明:
- 两个子查询分别获取整个表
Value列的最大值和最小值 - 主查询筛选出
Value等于这两个值的所有行,自动包含重复最值的条目 - 优点是代码简洁,大部分数据库都支持,小数据量下性能表现优秀
方案二:窗口函数标记全局最值
如果后续有扩展需求(比如按某个字段分组取最值),这种方法灵活性更高:
WITH ValueStats AS ( SELECT *, MAX(Value) OVER () AS GlobalMax, MIN(Value) OVER () AS GlobalMin FROM TableTest ) SELECT TypeID, PopularityID, CriteriaID, ExposureID, Value FROM ValueStats WHERE Value = GlobalMax OR Value = GlobalMin;
说明:
- 通过CTE(公共表表达式)给每一行附加全局的最大值和最小值
- 再筛选出
Value等于GlobalMax或GlobalMin的行 - 若后续需要按
TypeID分组取各组的最值,只需修改OVER()为OVER(PARTITION BY TypeID)即可,扩展性强
两种方案都能完美处理Value列存在重复最值的情况——只要行的Value等于全局最大或最小,就会被全部提取出来。
内容的提问来源于stack exchange,提问作者S31
相关产品推荐
相关产品推荐

