排查「列不在聚合或分組依據子句中」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中文網其他相關文章!