gpt4 book ai didi

mysql - SQL查询中的多个聚合函数

转载 作者:行者123 更新时间:2023-11-29 02:10:00 24 4
gpt4 key购买 nike

对于这个例子,我有 3 个简单的表(页面、订阅者和关注者):

My three tables

对于每个页面,我需要知道它有多少订阅者和关注者。我的结果应该是这样的:

Result

我尝试将 COUNT 函数与 GROUP BY 结合使用,如下所示:

SELECT p.ID, COUNT(s.UID) AS SubCount, COUNT(f.UID) AS FollowCount 
FROM page p, subs s, followers f
WHERE p.ID = s.ID AND p.ID = f.ID AND s.ID = f.ID
GROUP BY p.ID

显然这个语句返回了一个错误的结果。

我的另一项尝试是使用两个不同的 SELECT 语句,然后将两个子结果组合到一个表中。

SELECT p.ID, COUNT(s.UID) AS SubCount FROM page p, subs s WHERE p.ID = s.ID GROUP BY p.ID

SELECT p.ID, COUNT(f.UID) AS FollowCount FROM page p, follow f WHERE p.ID = f.ID GROUP BY p.ID

我觉得必须有一种更简单/更短的方法来做这件事,但我太没有经验了,找不到它。

最佳答案

永远不要FROM 子句中使用逗号。 始终使用正确、明确、标准 JOIN 语法。

接下来,了解 COUNT() 的作用。它计算非 NULL 值的数量。因此,您的表达式将返回相同的值——因为 f.UIDs.UID 永远不会是 NULL(由于 JOIN 条件)。

问题在于不同的维度会成倍增加数量。一个简单的解决方法是使用 COUNT(DISTINCT):

SELECT p.ID, COUNT(DISTINCT s.UID) AS SubCount, COUNT(DISTINCT f.UID) AS FollowCount 
FROM page p JOIN
subs s
ON p.ID = s.ID JOIN
followers f
ON s.ID = f.ID
GROUP BY p.ID;

内部连接等同于原始查询。您可能需要 left join 以便计数为零:

SELECT p.ID, COUNT(DISTINCT s.UID) AS SubCount, COUNT(DISTINCT f.UID) AS FollowCount 
FROM page p LEFT JOIN
subs s
ON p.ID = s.ID LEFT JOIN
followers f
ON p.ID = f.ID
GROUP BY p.ID;

关于mysql - SQL查询中的多个聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54963699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com