概述
查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩 --
where 之后的条件是一样的 ,一个是 显性连接 一个是隐形连接
SELECT st.sid,st.sname,avg(s.score) from student st INNER join sc s on st.sid = s.sid where s.sid in(
SELECT s1.sid from sc s1 where s1.score<60 group by s1.sid having count(1)>=2);
--------- --------- ---------
04 李云 33.00000
--------- --------- ---------
select st.*,avg(s.score) from student st,sc s where st.sid =s.sid and
s.score<60 group by s.sid having count(1)>=2;
--------- --------- ---------
04 李云 33.33333
06 吴兰 32.50000
--------- --------- ---------
为什么sql 查询的结果不同呢? 原因出在 SELECT st.sid,st.sname,avg(s.score) 这个字段上面 取平均值
在没有分组限制的情况下 avg() 只会返回一条数据。。。。。所以 上面一条 只有一条数据。。。
改正的话:
SELECT st.sid,st.sname,avg(s.score) from student st INNER join sc s on st.sid = s.sid where s.sid in(
SELECT s1.sid from sc s1 where s1.score<60 group by s1.sid having count(1)>=2) group by s.sid;
有点太啰嗦了。。。。
MYSQL5.7版本sql_mode=only_full_group_by问题(借用。。。)
5.7版本 用 group by 查询的时候 报错 this is incompatible with sql_mode=only_full_group_by ;
解决:
1、查看sql_mode
select @@global.sql_mode
查询出来的值为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2、去掉ONLY_FULL_GROUP_BY,重新设置值。
set@@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
最后
以上就是正直可乐为你收集整理的mysql sql文的一些坑(1)---- avg(平均值) 附带 mysql5.7 group by 的一个配置错误MYSQL5.7版本sql_mode=only_full_group_by问题(借用。。。)的全部内容,希望文章能够帮你解决mysql sql文的一些坑(1)---- avg(平均值) 附带 mysql5.7 group by 的一个配置错误MYSQL5.7版本sql_mode=only_full_group_by问题(借用。。。)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复