首页 > 解决方案 > mysql 选择有限制的行,但也包括超过限制的相同投票的用户

问题描述

表名是 user_votes ,我们通过这个查询根据投票数获得前五名用户

select * from user_votes order by votes desc limit 5

它工作正常,但现在假设第 5 个用户和第 6 个用户的投票数相同。那么这个查询将只选择 TOP 5 而忽略第 6 个用户。我们也想包括第 6 位用户,因为他的票数与第 5 位相同

如附图中,user_id [1,5] 的底部 2 个用户拥有相同的投票,还有一个用户拥有相同的投票但查询不会显示它

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

在此处输入图像描述

Mysql 版本是Ver 8.0.25

标签: mysqlwindow-functionsranking

解决方案


这是DENSE_RANK()窗口函数的工作。这是一个小提琴

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;

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


推荐阅读