我有两个有值的表:
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;
但我在字段列表中得到了一个未知的列“平均值”。
有什么想法吗?
发布于 2022-04-07 09:48:55
我认为您的查询顺序不正确。正确的查询应该是相似的-
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;
https://stackoverflow.com/questions/71779663
复制相似问题