有没有办法以交替方式订购sql(拼写最高和最低结果)
例如,逐年降序会导致类似:
2016
2015
2014
2013
按年升序排序会产生类似
的结果1990
1991
1992
1993
我想要实现的目标是:
2016
1990
2015
1991
可能有一种手动方式来执行此操作(即排序和限制然后UNION
两个结果集),但除此之外,SQL(在我的情况下是Postgres)是否原生支持这个?
答案 0 :(得分:3)
假设您的表格table_name
列名为year_column
(如果您有查询,请将table_name
更改为您的查询,同时更改为year_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;
答案 1 :(得分:0)
select *
from t
order by least (row_number () over (order by yr asc),row_number () over (order by yr desc))
,yr desc
;