一共有三个表,我想得到一个用户的推文总数和他收到的推文总数。
我试图结合两个查询来获得我想要的但失败了。之前的几个问题都看了,还是没搞明白。
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;
答案 0 :(得分:2)
我建议为此使用相关子查询:
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)
上建立索引。