Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL交替排序_Sql_Postgresql - Fatal编程技术网

SQL交替排序

SQL交替排序,sql,postgresql,Sql,Postgresql,有没有一种方法可以交替地对sql进行排序(将最高和最低结果交错排列) 例如,按年份递减的顺序会产生如下结果: 2016 2015 2014 2013 按年递增的顺序会产生类似的结果 1990 1991 1992 1993 我想要实现的是: 2016 1990 2015 1991 可能有一种手动方法可以做到这一点(即排序和限制然后将两个结果集合并),但除此之外,SQL(在我的例子中是Postgres)是否在本机上支持这一点?假设您的表表名具有列名年列(如果有查询,请将表\u名称更改为您的查询

有没有一种方法可以交替地对sql进行排序(将最高和最低结果交错排列)

例如,按年份递减的顺序会产生如下结果:

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;