我收到一个错误 -
列“Employee.EmpID”在选择列表中无效,因为它是 不包含在聚合函数或 GROUP BY 子句中。
select loc.LocationID, emp.EmpID from Employee as emp full join Location as loc on emp.LocationID = loc.LocationID group by loc.LocationID
这种情况符合 Bill Karwin 给出的答案。
对上述内容的更正,适合 ExactaBox 的答案 -
select loc.LocationID, count(emp.EmpID) -- not count(*), don't want to count nulls from Employee as emp full join Location as loc on emp.LocationID = loc.LocationID group by loc.LocationID
原始问题 -
对于 SQL 查询 -
select * from Employee as emp full join Location as loc on emp.LocationID = loc.LocationID group by (loc.LocationID)
我不明白为什么会出现此错误。我想要做的就是连接表,然后将特定位置的所有员工分组在一起。
我想我对自己的问题有了部分解释。告诉我是否可以 -
要将在同一地点工作的所有员工分组,我们必须首先提及 LocationID。
然后,我们不能/不提及旁边的每个员工 ID。相反,我们提到该地点的员工总数,即我们应该对在该地点工作的员工进行 SUM()。我不确定为什么我们要采用后一种方式。 因此,这解释了错误的“它不包含在任一聚合函数中”部分。
错误的 GROUP BY 子句部分的解释是什么?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
如果您设置禁用
ONLY_FULL_GROUP_BY服务器模式(默认情况下),您的查询将在MYSQL中运行。但在本例中,您使用的是不同的 RDBMS。因此,为了使您的查询正常工作,请将所有非聚合列添加到您的GROUP BY子句中,例如非聚合列意味着该列不会传递到聚合函数,例如
SUM、MAX、COUNT等。假设我有下表
T:我执行以下查询:
输出应有两行,一行为
a=1,第二行为a=2。但是 b 的值应该在这两行中显示什么呢?每种情况都有三种可能性,查询中没有任何内容明确说明为每组中的 b 选择哪个值。意思很模糊。
这演示了单值规则,该规则禁止在运行 GROUP BY 查询时获得未定义的结果,并且在选择列表中包含不属于分组的任何列标准,也不会出现在聚合函数(SUM、MIN、MAX 等)中。
修复它可能如下所示:
现在很明显您想要以下结果: