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

SQL如何获取两列唯一组合且每个组合取第三列最小值?

方案1:GROUP BY 聚合(仅需col1、col2、diff三列时使用)

直接对col1和col2分组,用MIN()聚合函数取每组diff的最小值即可,这是最简单的实现方式,代码如下:

SELECT col1, col2, MIN(diff) AS diff
FROM 你的表名
GROUP BY col1, col2;
方案2:窗口函数(需取最小diff对应整行记录时使用)

如果你的表除了这三列还有其他字段需要保留,推荐用ROW_NUMBER()窗口函数实现,主流数据库(MySQL 8.0+、PostgreSQL、SQL Server、Oracle等)均支持:

WITH ranked_records AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY diff ASC) AS rn
    FROM 你的表名
)
SELECT col1, col2, diff -- 此处可新增你需要的其他字段
FROM ranked_records
WHERE rn = 1;

如果同一col1、col2组合存在多条diff相同的最小值记录,需要全部保留的话,将ROW_NUMBER()替换为RANK()即可。

方案3:关联子查询(兼容不支持窗口函数的低版本数据库)

如果你使用的是不支持CTE和窗口函数的低版本数据库(比如MySQL 5.x),可以用子查询先查出每组最小diff,再关联原表取对应记录:

SELECT t1.*
FROM 你的表名 t1
INNER JOIN (
    SELECT col1, col2, MIN(diff) AS min_diff
    FROM 你的表名
    GROUP BY col1, col2
) t2 ON t1.col1 = t2.col1 AND t1.col2 = t2.col2 AND t1.diff = t2.min_diff;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:06:04