MySQL - 如何组合三个表来获得计数
MySQL - how to combine three tables to get the counts
有3个table,我想得到一个用户的推文总数和他的推文获得的总点赞数。
我试图合并两个查询来获得我想要的但失败了。看了前面几个问题还是没搞明白
- 用户table
id
名字
1
用户 1
- 推文 table
id
UserId(外键)
内容
1
用户 1
你好
- 赞table
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)
上建立索引。
有3个table,我想得到一个用户的推文总数和他的推文获得的总点赞数。
我试图合并两个查询来获得我想要的但失败了。看了前面几个问题还是没搞明白
- 用户table
id | 名字 |
---|---|
1 | 用户 1 |
- 推文 table
id | UserId(外键) | 内容 |
---|---|---|
1 | 用户 1 | 你好 |
- 赞table
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)
上建立索引。