You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询如何选取指定字段为最小值的所有匹配行

解决方案

要获取查询结果中SORT_ORDER为最小值对应的所有行,无需提前预知最小值具体数值,以下两种写法均适配需求,可根据使用的数据库版本选择:

子查询匹配最小值(通用写法,兼容所有SQL数据库)

通过子查询先计算当前筛选条件下的最小SORT_ORDER值,再匹配所有等于该值的记录,逻辑直观易维护:

SELECT *
FROM R_EXPORT_RU R_EXPORT_RU
INNER JOIN TABLE_TEMP_1 TT ON TT.RU_LVL = R_EXPORT_RU.RU_LVL_ID
WHERE PER_ID = 12345
  AND TT.SORT_ORDER = (
    SELECT MIN(TT_SUB.SORT_ORDER)
    FROM R_EXPORT_RU R_SUB
    INNER JOIN TABLE_TEMP_1 TT_SUB ON TT_SUB.RU_LVL = R_SUB.RU_LVL_ID
    WHERE R_SUB.PER_ID = 12345
  )
ORDER BY TT.SORT_ORDER;

该写法会自动匹配当前查询条件下的最小排序值,无论最小值是1还是4,都会返回所有对应该值的记录,和示例中需要返回2条SORT_ORDER=4数据的需求完全匹配。

窗口函数写法(适配支持窗口函数的数据库:MySQL 8.0+、PostgreSQL、SQL Server、Oracle等)

如果使用的是新版本支持窗口函数的数据库,可以用RANK()函数简化写法,避免重复编写关联和筛选逻辑:

SELECT *
FROM (
  SELECT *,
         RANK() OVER (ORDER BY TT.SORT_ORDER) AS sort_rank
  FROM R_EXPORT_RU R_EXPORT_RU
  INNER JOIN TABLE_TEMP_1 TT ON TT.RU_LVL = R_EXPORT_RU.RU_LVL_ID
  WHERE PER_ID = 12345
) ranked_res
WHERE sort_rank = 1;

RANK()函数会按照SORT_ORDER升序为所有记录打排名,排序值相同的记录会得到相同的排名,最终筛选排名为1的结果即可。

注意:不要用ROW_NUMBER()替代RANK(),ROW_NUMBER()会为排序值相同的记录生成不重复的连续序号,会导致同属最小SORT_ORDER的记录被错误过滤。


内容的提问来源于stack exchange,提问作者McGlone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:18:24