偵錯 MySQL 的「無效使用群組函數」錯誤
問題:
旨在識別至少兩個供應商提供的零件的查詢導致「無效使用群組功能」錯誤:
<code class="language-sql">SELECT c1.pid -- Select part ID (pid) FROM Catalog AS c1 -- From the Catalog table WHERE c1.pid IN ( -- Where pid is in the set: SELECT c2.pid -- Of pids FROM Catalog AS c2 -- From the Catalog table WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- Incorrect: COUNT in WHERE clause );</code>
問題:
錯誤源自於COUNT()
函數放置不當。 WHERE
子句在 分組之前 過濾各個行,使聚合函數 COUNT()
在此上下文中無效。
解:
正確的方法是使用 HAVING
子句,該子句在 分組和聚合之後過濾 :
<code class="language-sql">SELECT c1.pid FROM Catalog AS c1 WHERE c1.pid IN ( SELECT c2.pid FROM Catalog AS c2 GROUP BY c2.pid HAVING COUNT(c2.sid) >= 2 );</code>
說明:
修改後的查詢使用 Catalog
依 pid
將 GROUP BY c2.pid
表分組。 然後,HAVING
子句過濾這些群組,僅保留供應商 ID (sid
) 計數大於或等於 2 的群組。這可以正確識別至少有兩個供應商的零件。 然後,外部查詢從這些過濾組中選擇 pid
值。
以上是如何修復子查詢中 MySQL 的「無效使用群組函數」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!