SQL> select s.s_name,s.s_gender,sum(sc.sc_grade) sum_grade, 2 case sum_grade 3 when sum_grade>400 then '成绩优秀' 4 when sum_grade>=300 and sum_grade<=400 then '成绩良好' 5 else '成绩一般' 6 end as 成绩等级 7 from student s,score sc 8 group by s.s_name,s.s_gender 9 having s.s_gender='f'; when sum_grade>400 then '成绩优秀' * 第 3 行出现错误: ORA-00905: 缺失关键字
时间: 2024-03-23 08:44:08 浏览: 16
这个错误是因为在 CASE WHEN 语句中,不能直接使用别名,需要使用原始的聚合函数。你可以将这个查询语句稍作修改,如下所示:
```
SELECT
s.s_name,
s.s_gender,
SUM(sc.sc_grade) AS sum_grade,
CASE
WHEN SUM(sc.sc_grade) > 400 THEN '成绩优秀'
WHEN SUM(sc.sc_grade) >= 300 AND SUM(sc.sc_grade) <= 400 THEN '成绩良好'
ELSE '成绩一般'
END AS 成绩等级
FROM
student s, score sc
WHERE
s.s_id = sc.s_id
AND s.s_gender = 'f'
GROUP BY
s.s_name, s.s_gender;
```
这个查询语句会返回每个女生的姓名、性别、总成绩以及对应的成绩等级。注意,我添加了一个 WHERE 子句来确保只查询女生的成绩。同时,使用了 GROUP BY 子句来按照姓名和性别进行分组,以便计算每个女生的总成绩。
相关问题
SELECT s.*, s_score FROM student s JOIN score sc1 ON s.s_id = sc1.s_id AND s.s_class=1 JOIN score sc2 ON s.s_id = sc2.s_id AND s.s_class=2 WHERE sc1.s_score > sc2.s_score;
这是一个 SQL 查询语句,它的作用是查询出在同一学校中,既在1班又在2班的学生中,语文成绩比数学成绩高的学生信息以及他们的语文成绩。其中,student 表记录学生信息,包括学生编号(s_id)、姓名(s_name)和班级(s_class)等字段;score 表记录学生成绩信息,包括学生编号(s_id)、科目名称(c_name)和成绩(s_score)等字段。
select s.s_id,s_name,avg(sc2.s_score) from student s join (select sc1.s_id,count(sc1.s_id) cc from score sc1 where sc1.s_score<60 group by sc1.s_id having cc>=2) t on s.s_id =t.s_id join score sc2 on s.s_id =sc2.s_id; 报SQL 错误 [10025] [42000]: Error while compiling statement: FAILED: SemanticException [Error 10025]: Line 1:7 Expression not in GROUP BY key 's_id'帮我修改一下
根据错误信息,查询语句中的表达式 's_id' 不在 GROUP BY key 中,因此需要将其添加到 GROUP BY 子句中。下面是修改后的 SQL 查询语句:
```
SELECT s.s_id, s.s_name, AVG(sc2.s_score)
FROM student s
JOIN (
SELECT sc1.s_id, COUNT(sc1.s_id) cc
FROM score sc1
WHERE sc1.s_score < 60
GROUP BY sc1.s_id
HAVING cc >= 2
) t ON s.s_id = t.s_id
JOIN score sc2 ON s.s_id = sc2.s_id
GROUP BY s.s_id, s.s_name;
```
修改后,查询语句会按照 s_id 和 s_name 进行分组,从而解决了错误信息中提到的问题。