mysql 为什么这个SQL语句是错误的?

m4pnthwp  于 12个月前  发布在  Mysql
关注(0)|答案(1)|浏览(86)

this video的02:16左右,教授说这个SQL语句有问题,无法实现:

SELECT S.name, AVG(S.gpa)
FROM Students S
GROUP BY S.dept

我不明白为什么,我创建了一个表,它的工作原理。
为什么他们说这是错误的,在我的例子中有什么错误?

CREATE TABLE Students(
    name CHAR(20),
    gpa FLOAT,
    department CHAR(20)
);

Insert INTO Students VALUES
    ('001', 4.0, 'CS'),
    ('002', 3.5, 'MATH'),
    ('003', 3.7, 'STAT'),
    ('004', 4.1, 'CS');

我的MySQL 5.5的预期输出:screen capture

k3bvogb1

k3bvogb11#

MySQL中的这个“功能”是由sql_mode ONLY_FULL_GROUP_BY控制的,在旧版本的MySQL中,默认情况下是禁用的。
简单地说,从select语句中既不是聚合函数的一部分也不是group by子句的一部分的列返回的数据是任意的(您无法控制返回哪些值)。
例如,基于您的数据示例,以下对CS部门的查询将返回001,但也有004名称

SELECT S.name, S.department
FROM Students S
GROUP BY S.department;

参见example
更多信息请参见MySQL Handling of GROUP BY

相关问题