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

如何在SQL中新增列判断指定ID是否曾获得奖励

解决SQL跨行统计ID是否曾获奖励的问题

原数据表

IDYearlyAwardStatusYear
101Awarded2014
101Not Awarded2015
102Not Awarded2014
102Not Awarded2015

预期结果

IDYearlyAwardStatusYearEverAwarded
101Awarded2014Yes
101Not Awarded2015Yes
102Not Awarded2014No
102Not Awarded2015No

单独使用CASE语句只能判断当前行的状态,无法跨行统计同一ID的历史记录,以下两种方法可以实现需求:

方法1:窗口函数(推荐,性能更优)

利用MAX()窗口函数按ID分组,统计该ID是否存在过Awarded状态:

SELECT 
    ID,
    YearlyAwardStatus,
    Year,
    CASE 
        WHEN MAX(CASE WHEN YearlyAwardStatus = 'Awarded' THEN 1 ELSE 0 END) OVER (PARTITION BY ID) = 1 
        THEN 'Yes' 
        ELSE 'No' 
    END AS EverAwarded
FROM your_table_name;
  • 内层CASE将Awarded转换为1,其他状态转换为0
  • MAX() OVER (PARTITION BY ID)获取每个ID分组内的最大值,若为1则表示该ID曾获奖励

方法2:关联子查询

通过EXISTS子查询检查当前ID是否存在Awarded记录:

SELECT 
    t.ID,
    t.YearlyAwardStatus,
    t.Year,
    CASE 
        WHEN EXISTS (SELECT 1 FROM your_table_name t2 WHERE t2.ID = t.ID AND t2.YearlyAwardStatus = 'Awarded') 
        THEN 'Yes' 
        ELSE 'No' 
    END AS EverAwarded
FROM your_table_name t;
  • EXISTS子查询会快速判断是否存在符合条件的记录,无需遍历全部分组数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:50:46