列的原因在select列表中无效,因为它不包含在聚合函数或GROUP BY子句中
可能重复:
SQL中的GROUP BY /聚合函数混淆
我得到一个错误 – Column'Employee.EmpID'在select列表中是无效的,因为它不包含在聚合函数或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)
我不明白为什么我得到这个错误。 我想要做的就是join表格,然后把所有员工分在一起。
我想我对自己的问题有一个部分的解释。 告诉我,如果它确定 –
要将在同一地点工作的所有员工分组,我们必须首先提到LocationID。
然后,我们不能/不会提及它旁边的每个员工ID。 相反,我们提到该位置的雇员总数,即我们应该SUM()在该位置工作的雇员。 为什么我们这样做呢,我不确定。 所以,这就解释了“它不是包含在一个集合函数中”的部分错误。
错误中“GROUP BY子句”部分的解释是什么?
假设我有下面的表格T
:
ab -------- 1 abc 1 def 1 ghi 2 jkl 2 mno 2 pqr
我做了以下查询:
SELECT a, b FROM T GROUP BY a
输出应该有两行,一行是a = 1,第二行是a = 2。
但是,在这两行中, b的值应该是多less? 在每种情况下有三种可能性,查询中没有任何内容可以清楚地说明在每个组中为bselect哪个值。 这是不明确的。
这将演示单值规则 ,该规则禁止您在运行GROUP BY查询时获得的未定义结果,并且在select列表中包含既不属于分组条件也不出现在聚合函数(SUM, MIN,MAX等)。
解决它可能看起来像这样:
SELECT a, MAX(b) AS x FROM T GROUP BY a
现在很明显,你需要以下结果:
ax -------- 1 ghi 2 pqr
如果您设置为禁用ONLY_FULL_GROUP_BY
服务器模式( 默认情况下是 ),您的查询将在MYSQL
工作。 但在这种情况下,您正在使用不同的RDBMS。 因此,为了使您的查询工作, 将所有非聚合列添加到您的GROUP BY
子句,例如
SELECT col1, col2, SUM(col3) totalSUM FROM tableName GROUP BY col1, col2
非聚合列表示该列不会传递到聚合函数,如SUM
, MAX
, COUNT
等。
“我想要做的就是join表格,然后把所有员工聚集在一起。”
这听起来像你想要的是SQL语句的输出列出公司中的每个员工,但首先是所有在阿纳海姆办公室的人,然后是在布法罗办公室的人,然后是在克利夫兰办公室的人(A, B,C,明白了,显然我不知道你有什么位置)。
在这种情况下,会丢失GROUP BY语句。 所有你需要的是ORDER BY loc.LocationID
基本上,这个错误是说,如果你打算使用GROUP BY
子句,那么你的结果将是一个关系/表与每个组的行,所以在你的SELECT
语句中,你只能“select”的列,您正在分组并在该列上使用聚合函数,因为其他列将不会出现在结果表中。