gpt4 book ai didi

MySQL 在排序/排序后获取以特定 id 开头的行

转载 作者:搜寻专家 更新时间:2023-10-30 21:55:25 24 4
gpt4 key购买 nike

我得到了这张表:

id | score
1 | 1
2 | 4
3 | 4
4 | 3
5 | 2
6 | 2
7 | 1
8 | 4
9 | 2
10 | 3

我需要按分数排序:

id | score
2 | 4
3 | 4
8 | 4
4 | 3
10 | 3
5 | 2
6 | 2
9 | 2
1 | 1
7 | 1

并获取以 id 6

开头的前 3 行

所以结果应该是:

6  | 2
9 | 2
1 | 1

这可能吗?提前致谢

最佳答案

我会用累积 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。它允许将这些记录放在最上面。剩下的只是添加额外的排序标准并限制结果的数量。

Demo on DB Fiddle :

| 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

Demo on DB Fiddle :相同的结果

关于MySQL 在排序/排序后获取以特定 id 开头的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58476801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com