gpt4 book ai didi

sql - 第一最大第二最小排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:08 24 4
gpt4 key购买 nike

我有一个包含浮点非唯一数字的表,我想以一种特殊的方式对它们进行排序,即最大元素位于第 1 位,最小元素位于第 2 位,第二大元素位于第 3 位rd地点等。例如,

1,2,3,4,5,6,7,8,9

我想订购

1,9,2,8,3,7,4,6,5

更新:

通过 row_number() 升序和降序的组合可以是一个解决方案,例如

select c, a, d, abs(a - d)
from (select c,
row_number() over (order by c) as a
row_number() over (order by c desc) as d
from t)
order by abs(a - d)

但是你应该记住,由于非唯一数字,你可能会遇到一些问题,上面的解决方案将不起作用,例如下面的例子

c | a | d
4 | 1 | 4 | 3
4 | 2 | 5 | 3
5 | 3 | 1 | 2
5 | 4 | 2 | 2
5 | 5 | 3 | 2

这意味着在 OVER 语句下使用的表达式不应提供多种排序可能性

最佳答案

ANSI SQL 支持row_number()。您可以巧妙地使用 row_number() 来做到这一点:

select t.*
from (select t.*,
row_number() over (order by col) as seqnum_asc
row_number() over (order by col desc) as seqnum_desc
from table t
) t
order by (case when seqnum_asc <= seqnum_desc then seqnum_asc else seqnum_desc end),
col desc;

case 实际上是 least(seqnum_asc, seqnum_desc),但并非所有数据库都支持该构造。

关于sql - 第一最大第二最小排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607495/

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