排查“列不在聚合或分组依据子句中”SQL 错误
本指南解决了常见的 SQL 错误:“列‘Employee.EmpID’在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。”当您的 SELECT 语句包含既不聚合也不属于 GROUP BY 子句的列时,就会出现此错误。
理解聚合函数和 GROUP BY
GROUP BY
子句对指定列中具有相同值的行进行分组。 要显示这些组中的数据,您通常使用聚合函数,例如 SUM
、COUNT
、AVG
、MIN
或 MAX
。这些函数计算每个组的汇总值。
单值规则
SQL 的单值规则规定 SELECT 列表中的任何非聚合列在每个组中都必须具有单个一致的值。 如果非聚合列每组包含多个值,则查询将不明确,因为 SQL 无法确定要返回哪个值。
解决错误
假设您的目标是列出位置 ID 和每个位置的员工人数。更正后的查询使用 COUNT
聚合函数:
<code class="language-sql">SELECT loc.LocationID, COUNT(emp.EmpID) AS EmployeeCount FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID GROUP BY loc.LocationID;</code>
COUNT(emp.EmpID)
计算每个 LocationID
的员工数量。这确保了每组只有一个 EmployeeCount
值,满足单值规则并消除错误。 GROUP BY loc.LocationID
子句按位置对结果进行分组。
以上是为什么我的 SQL 查询会产生'列不在聚合或分组依据子句中”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!