Reason for Column is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause
Possible Duplicate:
GROUP BY / aggregate function confusion in SQL
我收到了一个错误 -
Column 'Employee.EmpID' is invalid in the select list because it is
not contained in either an aggregate function or the GROUP BY clause.
1 2 3 4 | 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的答案 -
1 2 3 4 | 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查询 -
1 2 3 4 | SELECT * FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID GROUP BY (loc.LocationID) |
我不明白为什么我会收到这个错误。我想要做的就是加入表格,然后将特定位置的所有员工分组在一起。
我想我对自己的问题有部分解释。告诉我它是否正常 -
要对在同一位置工作的所有员工进行分组,我们必须首先提及LocationID。
然后,我们不能/不提及它旁边的每个员工ID。相反,我们提到该位置的员工总数,即我们应该SUM()在该位置工作的员工。为什么我们这样做呢,我不
因此,这解释了"它不包含在聚合函数中"部分错误。
错误的
假设我有下表
1 2 3 4 5 6 7 8 | a b -------- 1 abc 1 def 1 ghi 2 jkl 2 mno 2 pqr |
我做以下查询:
1 2 3 | SELECT a, b FROM T GROUP BY a |
输出应该有两行,一行
但是,b的值应该显示在这两行中的每一行上?每种情况都有三种可能性,查询中没有任何内容可以清楚地说明每个组中为b选择哪个值。这是模棱两可的。
这演示了单值规则,它禁止运行GROUP BY查询时得到的未定义结果,并且您在select-list中包含既不属于分组条件的任何列,也不会出现在聚合函数中(SUM, MIN,MAX等)。
修复它可能如下所示:
1 2 3 | SELECT a, MAX(b) AS x FROM T GROUP BY a |
现在很清楚你想要以下结果:
1 2 3 4 | a x -------- 1 ghi 2 pqr |
如果设置为禁用
1 2 3 | SELECT col1, col2, SUM(col3) totalSUM FROM tableName GROUP BY col1, col2 |
非聚合列表示该列未传递到聚合函数,如
"All I want to do is join the tables and then group all the employees
in a particular location together."
听起来你想要的是SQL语句的输出列出公司中的每个员工,但首先是阿纳海姆办事处的所有人,然后是布法罗办事处的人员,然后是克利夫兰办事处的人员(A, B,C,得到它,显然我不知道你有什么位置)。
在这种情况下,丢失GROUP BY语句。你需要的只是
基本上,这个错误说的是,如果你打算使用