我有一个用户表,如下(简写):
id (BIGINT)
username (VARCHAR)
recommendedByUserId (BIGINT)
在recommendedByUserId
中存储推荐者的ID,这是推荐者的users.id
值。这是有效的:
SELECT u.username, recomm.recommCount, recomm.likesCount
FROM users u
INNER JOIN
(
SELECT recommendedByUserId as rid, COUNT(*) as recommCount, SUM(u.likes) as likesCount
FROM users u
GROUP BY recommendedByUserId
) recomm on recomm.rid = u.id
ORDER BY recomm.recommCount DESC
现在我还需要计算一个用户拥有多少个由另一个用户推荐的帖子,并将其汇总到推荐器上。我想我可以这样做:
SELECT u.username, recomm.recommCount, recomm.likesCount, recomm.postsCount
FROM users u
INNER JOIN
(
SELECT recommendedByUserId as rid, COUNT(*) as recommCount, SUM(u.likes) as likesCount, COUNT(posts.id) AS postsCount
FROM users u
INNER JOIN posts ON u.id = posts.author_id
GROUP BY recommendedByUserId
) recomm on recomm.rid = u.id
ORDER BY recomm.recommCount DESC
但这会产生奇怪的结果。
感谢您的任何意见!
最佳答案
这可能就是您想要的:
SELECT u.username, p.postsCount, recomm.recommCount, recomm.likesCount
FROM users u
JOIN
(
SELECT author_id, COUNT(*) AS postsCount
GROUP BY author_id
) AS p
ON u.id = p.author_id
JOIN
(
SELECT recommendedByUserId as rid, COUNT(*) as recommCount, SUM(u.likes) as likesCount
FROM users u
GROUP BY recommendedByUserId
) recomm ON recomm.rid = u.id
ORDER BY recomm.recommCount DESC
关于MySQL 对连接表的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18826457/