mysql select 行有限制但也包括相同票数超出限制的用户

mysql select rows with limit but also include the users with same votes beyond limit

table 的名字是 user_votes,我们通过此查询根据投票数获得前五位用户

select * from user_votes order by votes desc limit 5

它工作正常,但现在假设第 5 个用户和第 6 个用户的投票数相同。然后这个查询将 select 只有前 5 个用户,但会忽略第 6 个用户。我们也想包括第 6 个用户,因为他的票数与第 5 个相同

如附图所示,user_id [1,5] 后2位用户票数相同,还有1人票数相同但查询不显示

目标是包括投票数为 2 的所有用户,即使限制为 5。因此返回的最小行数为 5,以防所有用户的投票数不同,但最大值取决于最后一行的投票列值。在这种情况下,它的 2

Mysql 版本为 Ver 8.0.25

这是 DENSE_RANK() windowing function. Here's a fiddle 的工作。

WITH ranking AS (
  SELECT user_id, 
         votes, 
         DENSE_RANK() OVER (ORDER BY votes DESC) ranking
  FROM vote
)
SELECT * 
  FROM ranking 
 WHERE ranking <= 5
 ORDER BY ranking;

这些窗口函数允许您轻松指定各种事情,例如排名。