小编典典

PostgreSQL-条件排序

sql

我有下表:

key | date         | flag
--------------------------
1    now()           true
2    now() - 1 hour  true
3    now() + 1 hour  true
4    now()           false
5    now() - 1 hour  false
6    now() + 1 hour  false

我想要以下排序:

  • 首先,所有带有的行flag = false。这些行必须以排序date asc
  • 然后,其他所有行(flag = true)。但是,这些行必须使用进行排序date desc

以下查询正确吗?

(
    select *
    from test
    where flag = false
    order by date asc
)
union all
(
    select *
    from test
    where flag = true
    order by date desc
)

有一个更好的方法吗?请问union all保持行排序,因此只是连接两个内部查询的输出?

我不知道如何order by根据条件在中重复列。


阅读 377

收藏
2021-04-07

共1个答案

小编典典

可以使用来执行条件订单CASE,如下所示:

select *
    from test
order by 
    flag
  , case when flag then date end desc
  , case when not flag then date end asc
2021-04-07