SQL交替排序
有没有一种方法可以交替地对sql进行排序(将最高和最低结果交错排列) 例如,按年份递减的顺序会产生如下结果:SQL交替排序,sql,postgresql,Sql,Postgresql,有没有一种方法可以交替地对sql进行排序(将最高和最低结果交错排列) 例如,按年份递减的顺序会产生如下结果: 2016 2015 2014 2013 按年递增的顺序会产生类似的结果 1990 1991 1992 1993 我想要实现的是: 2016 1990 2015 1991 可能有一种手动方法可以做到这一点(即排序和限制然后将两个结果集合并),但除此之外,SQL(在我的例子中是Postgres)是否在本机上支持这一点?假设您的表表名具有列名年列(如果有查询,请将表\u名称更改为您的查询
2016
2015
2014
2013
按年递增的顺序会产生类似的结果
1990
1991
1992
1993
我想要实现的是:
2016
1990
2015
1991
可能有一种手动方法可以做到这一点(即排序和限制然后将两个结果集合并),但除此之外,SQL(在我的例子中是Postgres)是否在本机上支持这一点?假设您的表
表名
具有列名年列
(如果有查询,请将表\u名称
更改为您的查询,并将其更改为年\u列
)
select *
from t
order by least (row_number () over (order by yr asc),row_number () over (order by yr desc))
,yr desc
;
然后你可以用这个:
SELECT
ROW_NUMBER() OVER (ORDER BY year_column DESC) rnm_desc,
ROW_NUMBER() OVER (ORDER BY year_column ASC) rnm_asc,
t.*
FROM
table_name t
ORDER BY
LEAST(rnm_desc, rnm_asc),
year_column DESC;
假设您的表
table\u name
具有列名year\u column
(如果有查询,请将table\u name
更改为您的查询,并将其更改为year\u column
)
然后你可以用这个:
SELECT
ROW_NUMBER() OVER (ORDER BY year_column DESC) rnm_desc,
ROW_NUMBER() OVER (ORDER BY year_column ASC) rnm_asc,
t.*
FROM
table_name t
ORDER BY
LEAST(rnm_desc, rnm_asc),
year_column DESC;