我不知道该如何称呼这个问题。如果你有更好的话请指正我。
我有两个表,用户和帖子。
使用者:
id | username | password | ...
帖子:
id | author_id | title | content | ...
现在,我要列出“最活跃”的用户-写得最多的用户。具体来说,我想要top 10结果。
top 10
SELECT u.username, COUNT(p.id) AS count FROM Posts p, Users u WHERE u.id=p.author_id GROUP BY p.author_id ORDER BY count DESC LIMIT 10;
我可以得到预期的结果。但是,如果某些用户拥有相同数量的帖子,则排名可能不会是“ 公平的 ”。
例如,我可能会得到如下结果:
User 1 | 14 User 2 | 13 ... User 9 | 4 User 10 | 4
在这里,实际上还有几个拥有4帖子的用户。
4
因此,这top 10可能不是确切的10结果。如何获得包含帖子的额外用户行的更“ 公平 ”的结果4?
10
我认为这是正确的解决方案:您需要子查询才能知道在前十名中排名第十的职位有多少。然后,您可以使用外部查询来提取具有几乎该后计数的用户。
SELECT u.username, COUNT(p.id) AS count FROM Posts p JOIN Users u ON u.id = p.author_id GROUP BY p.author_id HAVING COUNT(p.id) >= ( SELECT COUNT(p.id) AS count FROM Posts p JOIN Users u ON u.id = p.author_id GROUP BY p.author_id ORDER BY count DESC LIMIT 9, 1 ) ORDER BY count DESC