问题描述:
SELECT A.SNO,A.SNAME,COUNT(B.CNO) COUNT_CNO,SUM(SCORE) SUM_SCORE
FROM STUDENT A INNER JOIN SC B
ON A.SNO=B.SNO GROUP BY A.SNO;
代码运行过程中报错
Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'practice.B.SNAME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
原因
是由于默认的 MySQL 配置中 sql_mode 配置了 only_full_group_by,需要 GROUP BY 中包含所有 在 SELECT 中出现的字段。
only_full_group_by:使用这个就是使用和oracle一样的group 规则, 出现在select后的字段(除了聚合的字段以外SUM,AVG,MAX,MIN)都必须要在group中。
解决方案:
1.修改配置文件
找到MySQL安装目录下的my.ini配置文件,
在最后一行添加:
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
2.重启服务:
打开管理员命令行,
输入 net stop mysql
停止服务,然后输入 net start mysql
开启服务。