我有表users
,其中包含有关每个用户的信息。然后是表posts
,其中包含有关文章的信息,最后是表user_posts
,其中包含以下列:
user_id
post_id
...
我正在尝试获得帖子数量最多的用户图表。我提出了这个问题:
选择u.id作为uid,u.name作为uname, 将(up.id)计为up_count 用户作为你JOIN user_posts up up up up.user_id = u.id ORDER BY vcount DESC LIMIT 25
此查询只返回一个用户以及表user_posts
中所有行的总计数。
我做错了什么?我需要按照发布每个用户的文章计数来获取25个用户的列表。
提前谢谢
答案 0 :(得分:3)
您的查询需要GROUP BY
子句,因为您使用了COUNT()
函数。
SELECT u.id as uid,
u.name as uname,
count(up.id) as up_count
FROM users as u
LEFT JOIN user_posts as up
ON up.user_id = u.id
GROUP BY u.id, u.name
ORDER BY up_count DESC LIMIT 25
您必须按ID
对它们进行分组,否则您将为所有记录单个总计数结果。还有一件事,请使用LEFT JOIN
,以便即使在帖子中仍然可以看到没有帖子的用户,其得分为0
。
答案 1 :(得分:1)
SELECT
u.id as uid, u.name as uname, count(up.id) as up_count
FROM users as u
JOIN user_posts as up ON up.user_id = u.id
GROUP BY
u.id, u.name
ORDER BY
vcount
DESC LIMIT 25