mysql - MySQL get rows starting with specific id after sort / order by
问题描述
I got this table:
id | score
1 | 1
2 | 4
3 | 4
4 | 3
5 | 2
6 | 2
7 | 1
8 | 4
9 | 2
10 | 3
I need to order it by score desc:
id | score
2 | 4
3 | 4
8 | 4
4 | 3
10 | 3
5 | 2
6 | 2
9 | 2
1 | 1
7 | 1
and get first 3 rows which starts with id
6
So the result should be:
6 | 2
9 | 2
1 | 1
Is this possible? Thanks in advance
解决方案
我会用累积的方法来解决这个问题sum()
(在 MySQL 8.0 中可用):
select
id,
score
from mytable
order by
sum(id = 6) over(order by score desc, id) desc,
score desc,
id
limit 3
订单按要求的sum()
方向记录;一旦id = 6
满足记录,总和就会取值1
。它允许将这些记录放在首位。剩下的只是添加额外的排序标准并限制结果的数量。
| id | score |
| --- | ----- |
| 6 | 2 |
| 9 | 2 |
| 1 | 1 |
在早期版本的 mysql 中,您可以使用用户变量来模拟窗口总和,如下所示:
select
id,
score
from
(select @sm := 0) s
cross join (select id, score from mytable order by score desc, id) t
order by
case when id = 6 then @sm := @sm + 1 end desc,
score desc,
id
limit 3
DB Fiddle 上的演示:相同的结果
推荐阅读
- bash - 在干净的环境中运行脚本
- python - 我如何编写一个函数,将餐厅列表作为参数并返回仅包含未关闭餐厅的列表?
- vb.net - 有没有办法在 UIPATH 中计算 citrix/image env 中的动态表行
- laravel - 在 Laravel 中通过密码重置令牌获取用户,无需显式编写 SQL 查询
- f# - 在类型别名中重用类型别名
- qt5 - 为什么 Qt5 中的 GUI 组件在不同分辨率的系统上部署时显示不同的大小
- javascript - 如何使用 es6 import 而不是 require?
- angular - 如何根据文本框的输入生成表格的动态行
- deep-learning - CNN中多个卷积层的效果
- angular - 订阅 FormBuilder valueChanges 时,使用 debounceTime 和 distinctUntilChanged 不起作用