SQL编程思想:基于5种主流数据库代码实现
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人


4.2.4 常见的语法问题

初学者在使用分组汇总操作时经常会犯的一个错误就是,在SELECT列表中使用了GROUP BY子句之外的字段,例如:

以上语句在大多数数据库中都会返回一个类似的错误:emp_name字段没有出现在GROUP BY子句或者聚合函数中。

这个错误的原因在于,我们想要按照部门进行分组,但是每个部门包含多名员工,数据库无法确定显示哪个员工的姓名。这是一个逻辑上的错误,而不是数据库实现的问题。

注意:MySQL通过sql_mode参数ONLY_FULL_GROUP_BY控制该行为,默认遵循SQL标准;但是如果禁用该参数,以上示例将不会报错,而是随机返回一个员工姓名。以上示例在SQLite中也不会报错,而是随机返回一个员工姓名。