首页 > 数据库 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板