有三个表,我想获取用户的推文总数和他的推文总数收到的点赞数。
我尝试组合两个查询来获得我想要的结果,但失败了。看了之前的几个问题,还是没搞明白。
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's,而不是 UserTweetBeLikedCount's。当我分别运行两个查询时,效果很好。但是当我将它们组合在一起时,它就不起作用了。
不知道如何显示正确的计数。有人可以给我提示来解决这个问题吗?
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)
上建立索引。
选择你。, (选择计数() 来自推文 其中 u.id = t.UserId ) 作为用户推文计数, (选择计数(*) 来自 喜欢 l 其中 u.id = l.UserId ) 作为用户喜欢计数 来自用户 u 按 UserTweetCount DESC 排序;