MySQL - 如何组合三个表来获得计数

MySQL - how to combine three tables to get the counts

有3个table,我想得到一个用户的推文总数和他的推文获得的总点赞数。

我试图合并两个查询来获得我想要的但失败了。看了前面几个问题还是没搞明白

id 名字
1 用户 1
id UserId(外键) 内容
1 用户 1 你好
id UserId(外键) TweetId(外键)
1 用户 1 你好

第一次查询:

SELECT Users.name, Users.id, COUNT(Tweets.UserId) AS UserTweetCount FROM Users
LEFT JOIN Tweets
ON Users.id = Tweets.UserId
GROUP BY Users.id
ORDER BY UserTweetCount DESC;

第二次查询:

SELECT Users.name, Users.id, COUNT(Likes.UserId) AS UserTweetBeLikedCount FROM Users
LEFT JOIN Likes
ON Users.id = Likes.UserId
GROUP BY Users.id;

我试过如下,但会 出错 UserTweetBeLikedCount 计数 。计数将是 UserTweetCount 的,而不是 UserTweetBeLikedCount 的。当我 运行 分别查询两个时,它运行良好。但是当我将它们组合在一起时,它并没有正常工作。 不知道如何显示正确的计数。有人可以给我提示来解决这个问题吗?

SELECT Users.name, Users.id, 
COUNT(Tweets.UserId) AS UserTweetCount, COUNT(Likes.UserId) AS UserTweetBeLikedCount 
FROM Users
LEFT JOIN Tweets
ON Users.id = Tweets.UserId
LEFT JOIN Likes
ON Users.id = Likes.UserId
GROUP BY Users.id
ORDER BY UserTweetCount DESC;

我建议为此使用相关子查询:

SELECT u.*,
       (SELECT COUNT(*)
        FROM Tweets t
        WHERE u.id = t.UserId
       ) AS UserTweetCount,
       (SELECT COUNT(*)
        FROM Likes l
        WHERE u.id = l.UserId
       ) AS UserLikeCount
FROM Users u
ORDER BY UserTweetCount DESC;

注意:为了提高性能,您需要在 Tweets(UserId)Likes(UserId) 上建立索引。