将学生成绩换算成各自的成绩

问题描述 投票:0回答:5

需要一个查询来打印

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;

sql oracle
5个回答
2
投票

您需要将 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;

1
投票

您可以在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 语句,您可以按升序或降序获得输出


0
投票

可以直接使用

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 的学生分配字母等级。


0
投票

我们需要设置“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;

0
投票

对于 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;
© www.soinside.com 2019 - 2024. All rights reserved.