
偵錯 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中文網其他相關文章!