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

SQL如何按b列分组取每组c列值最小的对应整行数据

解法1:全数据库兼容写法(支持所有SQL版本)

通过子查询先拿到每个b分组的最小c值,再和原表关联匹配得到完整行:

SELECT t.a, t.b, t.c
FROM 你的表名 t
INNER JOIN (
    -- 先按b分组计算每组最小c值
    SELECT b, MIN(c) AS min_c
    FROM 你的表名
    GROUP BY b
) t_min ON t.b = t_min.b AND t.c = t_min.min_c;

如果同一个分组下有多行c值同为最小值,该写法会返回所有符合条件的行。

解法2:窗口函数写法(支持MySQL 8.0+、PostgreSQL、SQL Server、Oracle等新版本数据库)

用ROW_NUMBER窗口函数给分组内的行按c值升序排序,取排序第一的行即可:

SELECT a, b, c
FROM (
    SELECT 
        a, b, c,
        -- 按b分组,组内按c升序排序打序号
        ROW_NUMBER() OVER (PARTITION BY b ORDER BY c ASC) AS rn
    FROM 你的表名
) tmp
WHERE rn = 1;

如果需要返回同一个分组下所有c值最小的行,把ROW_NUMBER()替换为RANK()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:04