需要一个查询来打印
ID
表中每条记录与学生 letter_grade
关联的 max_grade
和 Student
。输出必须按 ID 升序排序,并遵循以下格式:
Student 1 has grade: A
Student 2 has grade: C
Student 3 has grade: B
Student 4 has grade: F
But I'm not sure how to pass "id" value into the then clause.
Below is the code I have implemented :
select CASE
WHEN max_grade < 20 then "Student id has grade: F"
WHEN (max_grade >=20 AND max_grade <40) then "Student id has grade: D"
WHEN (max_grade >=40 AND max_grade <60) then "Student id has grade: C"
WHEN (max_grade >=60 AND max_grade <80) then "Student id has grade: B"
ELSE "Student id has grade: A"
END AS Grade_details from students order by id;
您需要将 id 和字母等级连接在短语中:
'Student ? has grade: ?'
这样:
select
'Student ' || id || ' has grade: ' || CASE
WHEN max_grade < 20 then 'F'
WHEN max_grade < 40 then 'D'
WHEN max_grade < 60 then 'C'
WHEN max_grade < 80 then 'B'
ELSE 'A'
END AS Grade_details
FROM students
ORDER BY id;
您可以在sql查询中使用case条件将分数转换为成绩
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
请参阅此链接了解案例陈述。
SELECT studentID, CASE statement FROM table name ORDER BY studentID
使用 order by 语句,您可以按升序或降序获得输出
可以直接使用
case
逻辑:
select (case when max_grade < 20 then 'F'
when max_grade < 40 then 'D'
when max_grade < 60 then 'C'
when max_grade < 80 then 'B'
else 'A'
end) as letter_grade
请注意,
case
表达式返回第一个匹配表达式,因此只需要上限。此版本假设 max_grade
不是 null
。
另请注意,此版本为最高分恰好为 80 的学生分配字母等级。
我们需要设置“sql_mode”(对于MySql数据库)
SET sql_mode = 'PIPES_AS_CONCAT';
select
CASE
when max_grade<20 then 'Student '||id||' has grade: F'
when max_grade>=20 and max_grade<40 then 'Student '||id||' has grade: D'
when max_grade>=40 and max_grade<60 then 'Student '||id||' has grade: C'
when max_grade>=60 and max_grade<80 then 'Student '||id||' has grade: B'
when max_grade>=80 then 'Student '||id||' has grade: A'
END AS letter_grade
from student order by ID;
对于 MySQL,使用 concat 方法。
SELECT
concat('Student ', id, ' has grade: ',
CASE
WHEN grade < 20 then 'F'
WHEN grade < 40 then 'D'
WHEN grade < 60 then 'C'
WHEN grade < 80 then 'B'
ELSE 'A'
END) AS Report
FROM students
ORDER BY id;