SQL GROUP BY
查詢中的無效列錯誤
在包含 GROUP BY
子句的 SQL 查詢中選擇列時,如果列既未包含在聚合函數中,也未包含在 GROUP BY
子句中,則可能會發生錯誤。此錯誤通常表現為:「列 'Employee.EmpID' 在選擇清單中無效,因為它既未包含在聚合函數中,也未包含在 GROUP BY
子句中」。
其原因在於單值規則。在 GROUP BY
查詢中,非聚合列的輸出在每個群組內必須是唯一的。但是,像 'Employee.EmpID' 一樣選擇單一列而不對其進行聚合,會導致結果不明確。
要解決此錯誤,請將資料列包含在 GROUP BY
子句中,或對其套用聚合函數。例如,如果您想要計算每個位置的員工人數,請使用以下查詢:
<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>
此查詢計算每個位置的員工人數,同時仍為每個群組提供位置 ID。或者,如果您想要為每個位置選擇所有列,但只顯示最新的員工 ID(最大值),則可以使用 MAX
聚合函數:
<code class="language-sql">SELECT loc.LocationID, MAX(emp.EmpID) AS LatestEmployeeID FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID GROUP BY loc.LocationID</code>
透過使用聚合函數或將資料列包含在 GROUP BY
子句中,您可以確保檢索到的資料明確且符合單值規則。
以上是為什麼使用 GROUP BY 的 SQL SELECT 查詢傳回「無效列」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!