小编典典

MySQL选择具有相同条件值的顶部行

sql

我不知道该如何称呼这个问题。如果你有更好的话请指正我。

我有两个表,用户和帖子。

使用者:

id | username | password | ...

帖子:

id | author_id | title | content | ...

现在,我要列出“最活跃”的用户-写得最多的用户。具体来说,我想要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帖子的用户。

因此,这top 10可能不是确切的10结果。如何获得包含帖子的额外用户行的更“ 公平 ”的结果4


阅读 195

收藏
2021-03-23

共1个答案

小编典典

我认为这是正确的解决方案:您需要子查询才能知道在前十名中排名第十的职位有多少。然后,您可以使用外部查询来提取具有几乎该后计数的用户。

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
2021-03-23