gpt4 book ai didi

php - Mysql统计连接字段

转载 作者:行者123 更新时间:2023-11-29 07:56:49 25 4
gpt4 key购买 nike

我有 3 个表:帐户、评论和关注者

在帐户中,我跟踪用户信息,在评论中跟踪他们的评论,在关注者中跟踪他们关注的人。我想创建一个查询,在其中获取帐户的基本信息、评论数和关注者数。我有一个查询但不起作用:

SELECT 
a.company,
a.firstname,
a.lastname,
a.title,
a.email,
a.zipcode,
a.created,
a.newsletter,
COUNT(c.id) comments,
COUNT(f.id) follows,
a.linkedinid
FROM accounts a
LEFT JOIN comments c ON a.id = c.user_id
LEFT JOIN followers f ON a.id = f.user_id

知道我做错了什么吗?

最佳答案

认为有两个问题。

首先,您没有 GROUP BY 子句,因此它将返回所有内容的计数(返回一行),而不是返回每个帐户的一行计数。帐户详细信息将来自未定义的行。

其次,您只需 COUNT(c.id)/COUNT(f.id)。如果一个帐户有多个关注者和多个评论,那么它将获得这些关注者和帐户的每个组合,因此计数将适用于组合数量。例如,2 个评论和 3 个关注者将给出 6 个组合,并且两个计数均为 6。

通过添加 GROUP BY 并向 COUNT 添加 DISTINCT 来修复这些问题:-

SELECT 
a.company,
a.firstname,
a.lastname,
a.title,
a.email,
a.zipcode,
a.created,
a.newsletter,
COUNT(DISTINCT c.id) comments,
COUNT(DISTINCT f.id) follows,
a.linkedinid
FROM accounts a
LEFT JOIN comments c ON a.id = c.user_id
LEFT JOIN followers f ON a.id = f.user_id
GROUP BY a.company,
a.firstname,
a.lastname,
a.title,
a.email,
a.zipcode,
a.created,
a.newsletter,
a.linkedinid

请注意,在 MySQL 中,不必对所有非聚合字段进行 GROUP BY,只要其他字段依赖于 GROUP BY 中的字段即可。然而,如果您这样做,大多数其他风格的 SQL 都会失败,因此对我来说,最佳实践是将它们全部放在 GROUP BY 中。

关于php - Mysql统计连接字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936059/

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