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;
这些窗口函数允许您轻松指定各种事情,例如排名。
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;
这些窗口函数允许您轻松指定各种事情,例如排名。