有一种奇怪的行为。我知道使用GROUP BY时,SELECT中的所有列都应该在group by子句中,或者具有聚合功能。但是,以下代码显示了一些有争议的内容:
// id is a primary key select id, name from user group by name; <-- error because of group by (expected) select id, name from user group by id; <-- works (unexpected!)
我想念什么?找不到说明分组依据中有关主键某些潜在特殊情况的文档。
在文档中涵盖了(但不是特别明显):
当存在GROUP BY或存在任何聚合函数时,SELECT列表表达式除非在聚合函数中或未分组的列在功能上依赖于分组的列,否则对于引用未分组的列是无效的,因为否则会更多一个未分组的列返回一个可能的值。如果分组的列(或其子集)是包含未分组的列的表的主键,则存在功能依赖性。
在这种情况下,我猜这id
是该表的主键user
,它将在name
功能上依赖于id
。