查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩。
问题描述
select sc.s_id, st.s_name,avg(sc.s_score) avg_score
from score sc,student st
where st.s_id = sc.s_id
group by sc.s_id
having avg(sc.s_score)>= 60;
在oracle中用这个查询语句,会报错误:ORA-00979:不是GROUP BY 表达式
原因分析:
select 列表项中不存在的列可以出现在group by的列表项中,但反过来就不行了,在select列表项中出现的列必须全部出现在group by后面。
参考博客:https://blog.csdn.net/dreamderekwq/article/details/47253577
解决方案:
在group by 后补充完整即可
select sc.s_id, st.s_name,avg(sc.s_score) avg_score
from score sc,student st
where st.s_id = sc.s_id
group by sc.s_id, st.s_name
having avg(sc.s_score)>= 60;