首頁 > 資料庫 > mysql教程 > 為什麼我的 SQL COUNT 函數計算所有行而不是不同的行?

為什麼我的 SQL COUNT 函數計算所有行而不是不同的行?

Linda Hamilton
發布: 2025-01-18 05:32:09
原創
651 人瀏覽過

Why Is My SQL COUNT Function Counting All Rows Instead of Distinct Rows?

SQL COUNT 故障排除:為什麼它計算所有行而不是不同的行

本文解決了一個常見的 SQL 問題:COUNT 函數傳回總行數而不是不同計數。我們將分析有問題的 SQL 語句並展示如何修正它。

以下 SQL 查詢旨在對單一行進行計數,但它錯誤地對所有行進行計數:

<code class="language-sql">SELECT `ID`, `To`, `Poster`, `Content`, `Time`, ifnull(`Aura`, 0) AS `Aura`
FROM (
    SELECT *
    FROM (
        SELECT DISTINCT *
        FROM messages m
        INNER JOIN (
            SELECT Friend2 AS Friend FROM friends WHERE Friend1 = '1'
            UNION ALL
            SELECT Friend1 AS Friend FROM friends WHERE Friend2 = '1'
        ) friends ON m.Poster = friends.`Friend`
        UNION ALL SELECT DISTINCT *, '1' FROM messages WHERE `Poster` = '1'
    ) var
    LEFT JOIN (
        SELECT `ID` AS `AuraID`, `Status` AS `AuraStatus`, COUNT(*) AS `Aura`
        FROM messages_aura
    ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)
) final
GROUP BY `ID`, `Poster`
ORDER BY `Time` DESC
LIMIT 10;</code>
登入後複製

問題出在LEFT JOIN子查詢。 它缺少一個關鍵的 GROUP BY 子句。沒有 COUNT(*)GROUP BY 函數會聚合 messages_aura 中的所有行。

要解決此問題,我們需要在 GROUP BY 子查詢中新增 LEFT JOIN 子句:

<code class="language-sql">LEFT JOIN (
    SELECT `ID` AS `AuraID`, `Status` AS `AuraStatus`, COUNT(*) AS `Aura`
    FROM messages_aura
    GROUP BY AuraID, AuraStatus
) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)</code>
登入後複製

修訂後的 LEFT JOIN 現在可以在應用 AuraID 函數之前按 AuraStatusCOUNT(*) 將結果正確分組。這可確保 COUNT 函數對 AuraIDAuraStatus 的不同組合進行操作,從而產生所需的單獨行計數。 然後,更正後的查詢將按預期準確計算不同的行。

以上是為什麼我的 SQL COUNT 函數計算所有行而不是不同的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板