首页 > 数据库 > mysql教程 > 为什么我的 SQL COUNT(*) 返回总计而不是单个行计数?

为什么我的 SQL COUNT(*) 返回总计而不是单个行计数?

Susan Sarandon
发布: 2025-01-18 05:41:09
原创
920 人浏览过

Why Does My SQL COUNT(*) Return the Total Instead of Individual Row Counts?

SQL 查询返回总行数而非个体行数计数

在执行 SQL 查询时,务必正确使用 COUNT(*) 等聚合函数,以免得到错误的结果。请考虑以下语句:

<code class="language-sql">SELECT `ID`, `To`, `Poster`, `Content`, `Time`, ifnull(`Aura`, 0) AS `Aura`
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)
GROUP BY `ID`, `Poster`
ORDER BY `Time` DESC
LIMIT 10;</code>
登录后复制

此查询的目标是从 messagesmessages_aura 表中查询数据,计算每个用户的 aura 消息出现次数。然而,问题出在 LEFT JOIN 子查询中,缺少 GROUP BY 子句。

问题: 如果没有 GROUP BY 子句,子查询将返回所有用户的 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>
登录后复制

通过添加 GROUP BY AuraID, AuraStatus,子查询现在按这些列分组结果,确保每个用户的 aura 计数都是准确的。

以上是为什么我的 SQL COUNT(*) 返回总计而不是单个行计数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板