首頁 >資料庫 >mysql教程 >為什麼 MySQL 會拋出「無效使用群組函數」以及如何使用 HAVING 修復它?

為什麼 MySQL 會拋出「無效使用群組函數」以及如何使用 HAVING 修復它?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-11 22:31:44895瀏覽

Why MySQL Throws "Invalid use of group function"

MySQL 錯誤:"Invalid use of group function" 的原因及解決方法

在給定的 MySQL 查詢中,「Invalid use of group function」 錯誤是因為在 WHERE 子句中使用了 COUNT 函數。 WHERE 子句在分組之前過濾行,導致錯誤。

使用 HAVING 子句解決問題

要解決此問題,請將 WHERE 子句替換為 HAVING 子句。 HAVING 子句在分組之後過濾群組。在本例中,HAVING 子句應檢查供應商 ID (sid) 的計數,以確保它大於或等於 2。

以下是更正後的子查詢:

<code class="language-sql">(
    SELECT c2.pid
    FROM Catalog AS c2
    WHERE c2.pid = c1.pid
    HAVING COUNT(c2.sid) >= 2
)</code>

包含 HAVING 子句的完整查詢

使用更新後的子查詢,完整的查詢變成:

<code class="language-sql">SELECT c1.pid                      -- 选择 pid
FROM Catalog AS c1                 -- 来自 Catalog 表
WHERE c1.pid IN (SELECT c2.pid   -- 其中 pid 在以下集合中:
    FROM Catalog AS c2             -- pids
    WHERE c2.pid = c1.pid
    HAVING COUNT(c2.sid) >= 2     -- 至少有两个对应的 sids
);</code>

此查詢將傳回至少由兩個不同供應商提供的零件的 pid。

以上是為什麼 MySQL 會拋出「無效使用群組函數」以及如何使用 HAVING 修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn