mysql - 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
解决方案
这是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;
这些窗口函数允许您轻松指定各种内容,例如排名。
推荐阅读
- ios - 在嵌入在 NavController 中的 VC 中呈现“视图”
- ios - SwiftUI 软件键盘 + 两个 TextFields = 约束冲突
- python - Python:有没有办法直接使用 Pandas 系列对象而不使用列表
- modelica - 如何理解 Modelica 模型中的病态雅可比问题?
- r - 重新排序 mlr3 的训练模型重要性值以匹配 R 中的任务?
- c++ - 结构初始化列表为零而不是初始化为值
- sql - 使用 partition by 子句时如何排序
- java - 如何根据给定的输入数字反转字符串的每个单词?
- google-maps - 在颤动中区分谷歌地图上的用户拖动和animateCamera
- ansible - 我使用 sed 命令添加了多行,但它显示了一些错误