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

如何基于子查询的Result值为外层查询统一生成Grade列

解决方案

可以通过以下两种SQL写法实现需求,为子查询的每一行统一添加符合规则的Grade列:

方法一:使用窗口函数

SELECT 
    a.*,
    CASE 
        WHEN MAX(CASE WHEN result = 'F' THEN 1 ELSE 0 END) OVER () = 1 THEN 'F'
        ELSE 'P'
    END AS Grade
FROM (
    SELECT roll_no, name, subject, mark, result 
    FROM tablea
) AS a

方法二:使用子查询判断全局状态

SELECT 
    a.*,
    CASE 
        WHEN EXISTS (SELECT 1 FROM tablea WHERE result = 'F') THEN 'F'
        ELSE 'P'
    END AS Grade
FROM (
    SELECT roll_no, name, subject, mark, result 
    FROM tablea
) AS a

逻辑说明

  • 方法一通过窗口函数MAX() OVER ()统计整个结果集内是否存在Result='F'的行:只要有一行满足,MAX值为1,所有行的Grade设为'F';全为'P'时MAX值为0,Grade设为'P'。
  • 方法二通过EXISTS子查询直接检查原表中是否存在Result='F'的记录,存在则所有行Grade为'F',否则统一设为'P'。

示例验证

针对你提供的子查询结果,两种方法都会输出符合预期的结果:

Roll_no     Name   Subject         Mark   Result    Grade
 1           J       Math           90     P          F
 1           J       English        80     P          F 
 1           J       Lang           30     F          F
 1           J       Science        60     P          F
 1           J       History        70     P          F 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:07:35