如何在postgres中每10行使用order ?



我需要对单列表的每10行进行排序,并获取n间隔的行。我使用where mod(rownum,10)做第二部分。但是我找不到一种方法在获取n行的第一行和最后一行之前对每n行进行排序。请帮助表就像=>

Column
15
18
13
14
11
16
17
12
19
20
9
2
3
5
4
6
7
8
1
10

这是我当前正在使用的查询==>

Select column
from (select column,row_number() over (order by column) as rn
from table
) t
where mod(rn,10)=0 or mod(rn,10)=1;

这将获取

Column
1
10
11
20

但是我想要的是

Column
11
20
1
10

Ps:我不能排序整个列然后取每第1和第10行,我想排序前10列取第1和第10行,然后排序后10列取第11到第20行,等等。

并且我只能触发一次查询

像这样:

SELECT col, rn, (rn - 1) / 10 AS trunc
FROM (SELECT col, row_number() over (order by col) as rn
FROM data
) t
WHERE mod(rn,10)=0 or mod(rn,10)=1
ORDER BY (rn - 1) / 10 DESC
;

结果:

+------+----+-------+
| col  | rn | trunc |
+------+----+-------+
|   11 | 11 |     1 |
|   20 | 20 |     1 |
|    1 |  1 |     0 |
|   10 | 10 |     0 |
+------+----+-------+

工作示例

最新更新