我可以将CASE语句与JOIN一起使用吗



我有两个带有值的表:

CREATE TABLE students (
ids int AUTO_INCREMENT PRIMARY KEY,
name varchar(100) DEFAULT NULL,
surname varchar(100) DEFAULT NULL
);
CREATE TABLE register (
idr int AUTO_INCREMENT PRIMARY KEY,
data_ora datetime DEFAULT NULL,
idstu int DEFAULT NULL,
grade int DEFAULT NULL,
INDEX idstu (idstu),
);

要求是:2015年学生成绩列表,取决于平均成绩(10,9-非常好,8,7-好,6,5-令人满意,4-0-不好(

我想使用CASE语句,但我不知道如何将其与JOIN语句一起使用。

我试过这个:

SELECT name, surname, ROUND(avg(nota),2) as average
JOIN register ON students.ids = register.idstu,
CASE average
WHEN 10 THEN 'Very good'
WHEN 9 THEN 'Very good'
WHEN 8 THEN 'Good'
WHEN 7 THEN 'Good'
WHEN 6 THEN 'satisfactorily'
WHEN 5 THEN 'satisfactorily'
ELSE 'Not good'
END AS mark
FROM students
WHERE YEAR(data_ora) = 2015;

但我在字段列表中得到一个错误-未知列"average"。

有什么想法吗?

我认为您的查询顺序不正确。正确的查询应该相似-

SELECT name, surname, CASE WHEN ROUND(avg(nota),2) >= 9 THEN 'Very good'
WHEN ROUND(avg(nota),2) >= 7 THEN 'good' 
WHEN ROUND(avg(nota),2) >= 5 THEN 'satisfactorily'
ELSE 'Not good' END AS mark
FROM students
JOIN register ON students.ids = register.idstu
WHERE YEAR(data_ora) = 2015
GROUP BY name, surname;

最新更新