如何在不分组的情况下获取某列最小值并返回对应行其他列数据?
无分组获取最小值对应全字段记录的实现方法
不需要对字段做分组操作,两种写法都能实现需求,直接拿到最小值对应记录的其余字段数据。
写法1:窗口函数写法(推荐,大数据量场景效率更高)
用RANK()窗口函数直接按目标最小值列升序排序打排名标记,不需要做分组聚合,还能自动保留所有同最小值的匹配记录,不会丢数。
假设你的业务表名为target_table,需要取最小值的目标列名为min_col,查询语句如下:
SELECT month, col1, min_col, col2 FROM ( SELECT *, RANK() OVER (ORDER BY min_col ASC) as row_rank FROM target_table ) temp WHERE row_rank = 1;
写法2:简单子查询写法
如果场景逻辑简单,不需要后续扩展其他排序规则,直接嵌套取最小值做等值匹配即可,写法更简洁:
SELECT * FROM target_table WHERE min_col = (SELECT MIN(min_col) FROM target_table);
两种写法都会返回所有匹配最小值的记录,不会只返回单条结果。用你给出的示例数据执行后,返回结果完全符合预期:
- January, 24, 0, 3
- February, 12, 0, 1
内容的提问来源于stack exchange,提问作者K.R.
相关产品推荐
相关产品推荐

