gpt4 book ai didi

sql - strip 化 PostgreSQL 结果集的顺序

转载 作者:行者123 更新时间:2023-11-29 11:19:37 24 4
gpt4 key购买 nike

假设我有下表:

create temp table test (id serial, number integer);
insert into test (number)
values (5), (4), (3), (2), (1), (0);

如果我按数字降序排序,我会得到:

select * from test order by number desc;
id | number
---+--------
1 | 5
2 | 4
3 | 3
4 | 2
5 | 1
6 | 0

如果我按数字升序排序,我会得到:

select * from test order by number asc;

6 | 0
5 | 1
4 | 2
3 | 3
2 | 4
1 | 5

如何对顺序进行 strip 化,使其每行在升序和降序之间交替?例如:

6 | 0   or   1 | 5
1 | 5 6 | 0
5 | 1 2 | 4
2 | 4 5 | 1
4 | 2 3 | 3
3 | 3 4 | 2

最佳答案

更新

WITH x AS (
SELECT *
, row_number() OVER (ORDER BY number) rn_up
, row_number() OVER (ORDER BY number DESC) rn_down
FROM test
)
SELECT id, number
FROM x
ORDER BY LEAST(rn_up, rn_down), number;

或者:

...
ORDER BY LEAST(rn_up, rn_down), number DESC;

从较大的数字开始。

一开始我有两个 CTE,但一个就足够了 - 更简单、更快。

关于sql - strip 化 PostgreSQL 结果集的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419152/

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