首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL order by alternating

SQL order by alternating
EN

Stack Overflow用户
提问于 2016-11-15 16:29:16
回答 2查看 401关注 0票数 0

有没有办法以交替的方式对sql进行排序(拼接最高和最低的结果)

例如,按年份降序的结果如下所示:

代码语言:javascript
复制
2016
2015
2014
2013

按年份升序的结果如下所示

代码语言:javascript
复制
1990
1991
1992
1993

我想要实现的是:

代码语言:javascript
复制
2016
1990
2015
1991

可能有一种手动的方法(即对两个结果集进行排序和限制,然后对两个结果集进行UNION),但除此之外,SQL (在我的例子中是Postgres)本身是否支持这一点?

EN

回答 2

Stack Overflow用户

发布于 2016-11-15 16:41:19

假设您的表table_name的列名为year_column (如果您有一个查询,请将table_name更改为您的查询,并将same更改为year_column)

然后,您可以使用以下代码:

代码语言:javascript
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2016-11-15 16:40:49

代码语言:javascript
复制
select      *

from        t

order by    least (row_number () over (order by yr asc),row_number () over (order by yr desc))
           ,yr desc
;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40605157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档