mysql报错which is not functionally dependent on columns in GROUP BY clause

139 阅读1分钟
今天写SQL查询语句时,遇到报错which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
我写的sql语句如下:
//根据课程分组,查询课程出现次数大于1的记录
SELECT sno,cno, count( cno ) FROM score GROUP BY cno HAVING count( cno ) > 1
//select *
SELECT * FROM score GROUP BY cno HAVING count( cno ) > 1
表结构如下

其中SNO为学生编号,CNO为课程编号,DEGREE为成绩 image.png

查阅资料得知,当一条语句中有group by的话,select后面只能跟聚合函数和参与分组的字段,而sno既不是聚合函数也没有参与分组,所以不能出现在select之后。 所以修改后的SQL语句为:

//正确写法
SELECT cno, count( cno ) FROM score GROUP BY cno HAVING count( cno ) > 1
//再加一个max()函数也是可以的,统计每组的最高成绩
SELECT cno, count( cno ),max(degree) FROM score GROUP BY cno HAVING count( cno ) > 1

总结:画一张图来解释的话,分组后的数据是这样的:

image.png

由于每个组包含的学生并不是唯一的,所以分组后无法查询每个组对应的唯一学生编号。但是可以查询每个组中成绩的最大值以及每个组包含的记录条数。