假设我有一个包含两列的表格t1,Student_ID和成绩。数据显示如下:
Student_ID, Grade (1,'A'),(1,'C'),(1,'F'),(1,'A'),(2,'B'),(2,'A'),(2,'C'),(2,'A').
现在,我必须将Student_ID与名为“结果”的新列进行分组。 Student_ID 1的分数为'F',所以认为不及格,Student_ID 2的分数为'F',所以认为是及格。需要结果应该是这样。
Student_ID Result
1 Failed
2 Passed
因为该表有500条记录,所以不能手动输入“通过”或“失败”。
SELECT `Student_ID`, (IF(`Grade`='F',"Failed","Passed")) AS `Result`
FROM t1 group by `Student_ID`;
以上代码将不起作用,因为列Grade
具有4个非1值。
所以代码将是这样的。
SELECT `Student_ID`, (IF(`Grade` CONTAINS 'F',"Failed","Passed")) AS `Result` FROM t1 group by `Student_ID`;
在sql中没有这样的东西,但是可能是HAVING或IN,但是如何在这里使用它们?
答案 0 :(得分:0)
您可以将CASE语句与EXISTS一起使用:
select DISTINCT
t.Student_ID,
case
when exists (
select 1 from t1 where Student_ID = t.Student_ID and Grade = 'F'
) then 'Failed'
else 'Passed'
end Result
from t1 t
请参见demo。
结果:
| Student_ID | Result |
| ---------- | ------ |
| 1 | Failed |
| 2 | Passed |
您还可以通过对Grade
或1
的每个0
到'F'
或not 'F'
进行评估,然后按Student_ID
进行分组来做到这一点:
select
t.Student_ID,
case sum(t.Result)
when 0 then 'Passed'
else 'Failed'
end Result
from (select Student_ID, Grade = 'F' Result from t1) t
group by t.Student_ID
请参见demo。