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

如何用SQL按分组获取每组第一条记录?现有查询问题排查

问题1:修正tailors表按cat_id分组取每组第一条记录的SQL

你原来的SQL返回所有记录,是因为子查询的GROUP BY里多包含了id、name、status这些字段——这些字段每行都不同,导致每一行都被当成独立分组,min(id)就是当前行的id,所以外层查询会匹配所有行。

修正后的SQL:

SELECT * FROM tailors
WHERE id IN(
        SELECT min(id)
        FROM tailors
        GROUP BY cat_id
)

只保留cat_id作为分组字段,就能得到每个分类下的最小id,进而取出每组的第一条记录。

问题2:通用场景——获取每个group_id对应value最小的行

假设你的表结构包含group_id、value、name等字段,这里提供两种常用方法:

方法1:窗口函数(适合MySQL 8+、PostgreSQL、SQL Server等现代数据库)

SELECT t.*
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY value ASC) AS rn
    FROM your_table
) t
WHERE t.rn = 1;
  • PARTITION BY group_id:按group_id分组
  • ORDER BY value ASC:让每组内value最小的行排在第一位(标记为rn=1)
  • 外层筛选rn=1的行,就是每个组里value最小的行。如果同一个组有多个行value相同且都是最小值,可在ORDER BY后加额外字段(比如id)来确定唯一行。

方法2:关联子查询(兼容旧版本MySQL)

SELECT t1.*
FROM your_table t1
WHERE t1.value = (
    SELECT MIN(value)
    FROM your_table t2
    WHERE t2.group_id = t1.group_id
);

子查询先找到当前group_id对应的最小value,外层再取出该组内value等于这个最小值的所有行。如果允许同一组多个最小value的行存在,这个方法更合适。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:45:44