1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'gra

报错内容:

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'graduate.score.score_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

出现问题缘由:

1、本地MySQL版本为5.5,执行如下查询语句,结果正常:

SELECT * FROM score GROUP BY paper_name; 

2、云服务上安装的MySQL版本为8.0,执行了同样的查询语句,结果报错:

问题解决:

1、我的本意是想通过分组查询,得到有多少种paper_name,但是MySQL8.0好像不支持

SELECT * FROM 某表 GROUP BY 某列; 

2、于是我将SQL语句改为

SELECT paper_name FROM score GROUP BY paper_name; 

都执行成功!

问题分析:

1、我们SQL语句使用GROUP BY,是为了得到某列值有几种,这样的话使用

SELECT 某列 FROM 某表 GROUP BY 某列; 

就是最标准的写法,只得到某列值有几种。

2、对于

SELECT * FROM 某表 GROUP BY 某列;

而言,我们是能得到某列值有几种,但是也查出了其它没啥实质性意义、多余的列,这是不标准的。

3、所以我认为,MySQL5.5对比MySQL8.0(其它版本不清楚,没测试过)对于GROUP BY语句的宽容程度是不同的,MySQL8.0只允许最标准的GROUP BY语句,这就导致了同一SQL语句,不同MySQL版本执行效果不同。我们在书写SQL语句时一定要养成严谨、标准的习惯。

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值