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

SQL实现按AU_Id分组获取最小diff对应的Score

问题描述

现有如下数据表:

IDdatediffscore
A03/08/20239783
B11/08/202334356
B11/08/202367726
B11/08/202310512
B11/08/2023120837
C31/09/20235687
C31/09/202358072

需要编写SQL语句,获取每个ID对应的最小diff值所对应的Score。例如,ID为B时,因diff最小值为34,应返回Score值356。


方法一:子查询关联

先通过子查询计算每个ID的最小diff值,再关联原表筛选对应数据:

SELECT t.ID, t.score
FROM your_table t
INNER JOIN (
    SELECT ID, MIN(diff) AS min_diff
    FROM your_table
    GROUP BY ID
) sub ON t.ID = sub.ID AND t.diff = sub.min_diff;

逻辑说明:

  • 子查询按ID分组,得到每个ID的最小diff值;
  • 原表与子查询通过ID和diff值关联,精准匹配到每个ID最小diff对应的score。

方法二:窗口函数(适用于MySQL 8+、PostgreSQL、SQL Server等)

利用ROW_NUMBER()窗口函数对每组数据排序,取diff最小的行:

SELECT ID, score
FROM (
    SELECT 
        ID, 
        score,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY diff ASC) AS rn
    FROM your_table
) t
WHERE rn = 1;

逻辑说明:

  • 内层查询中,PARTITION BY ID按ID分组,ORDER BY diff ASC让组内数据按diff从小到大排序,ROW_NUMBER()为每组行分配序号;
  • 外层筛选序号为1的行,即每组diff最小的记录对应的score。

注意:若同一ID下存在多条diff同为最小值的记录,ROW_NUMBER()会随机返回其中一条;如需保留所有符合条件的记录,可替换为RANK()或DENSE_RANK()函数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:27:49