如何基于子查询的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
相关产品推荐
相关产品推荐

