sql 案件结果陈述

sql case statement of case results

我想将字母成绩转换为平均数,然后再转换回字母。

select 
  avg(case when grade = 'A' then 4
           when grade = 'B' then 3
           when grade = 'C' then 2
           when grade = 'F' then 1 end)
from student
where id = 'test'

这很有效 我现在想将平均值转换回字母。

我尝试过并且有效,但我忍不住认为没有更好更简单的方法来完成这个

select case(when (select 
  avg(case when grade = 'A' then 4
           when grade = 'B' then 3
           when grade = 'C' then 2
           when grade = 'F' then 1)
from student where id = 'test') = 4 then 'A' 

在第一个表达式上使用另一个 CASE 表达式:

SELECT
    CASE WHEN num_avg <= 1.0 THEN 'F'
         WHEN num_avg <= 2.0 THEN 'C'
         WHEN num_avg <= 3.0 THEN 'B'
         ELSE 'A' END AS avg_letter_grade
FROM
(
    SELECT AVG(CASE grade WHEN 'A' THEN 4.0
                          WHEN 'B' THEN 3.0
                          WHEN 'C' THEN 2.0
                          WHEN 'F' THEN 1.0 END) AS num_avg
    FROM student
    WHERE id = 'test'
) t;

我在外部查询中使用的字母等级分配与我对典型等级尺度的理解不一致,但它符合你的尺度,所以我选择使用它。