select s.s_name,s.s_gender,sum(sc.sc_grade) as sum_grade, case sum_grade 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_no=sc.s_no and s.s_gender='f' group by s.s_name,s.s_gender ;
时间: 2024-03-24 09:35:37 浏览: 9
这个查询语句中,在 CASE WHEN 语句中也出现了类似的问题。正确的语法应该是使用 sum(sc.sc_grade) 作为比较的条件。正确的查询语句如下:
```
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_no = sc.s_no
AND s.s_gender = 'f'
GROUP BY
s.s_name, s.s_gender;
```
这个查询语句和之前给出的语句相同,只是将 s_id 改为了 s_no,因为我猜测 s_no 是 student 表的主键。另外,注意到 GROUP BY 子句中也需要包含 s_gender,否则查询结果可能包含男生的成绩。
相关问题
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: 缺失关键字
这个错误是因为在 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 子句来按照姓名和性别进行分组,以便计算每个女生的总成绩。
SUM(subquery.total_number_before) AS total_number
如果你想要将子查询中的total_number_before列的值进行合计,可以在主查询中使用SUM函数,并将子查询结果作为表进行处理。
以下是修改后的示例查询语句:
```sql
SELECT
subquery.week,
SUM(subquery.total_number_before) AS total_number
FROM (
SELECT
CONCAT(YEAR(e.tb_time), '年第', WEEK(e.tb_time, 1), '周') AS week,
SUM(e.number) AS total_number_before
FROM
fa_tianchuang e
GROUP BY
YEAR(e.tb_time),
WEEK(e.tb_time, 1)
) subquery
GROUP BY
subquery.week
```
在这个查询中,我们将原始的子查询作为表subquery进行处理。然后,使用SUM函数对subquery中的total_number_before列进行合计,并将结果命名为total_number。
最后,使用GROUP BY子句对week列进行分组,以便按周数合并工程量的总和。
请根据你的实际数据表结构和需求进行适当的修改。