PostgreSQL-条件排序
我有下表:PostgreSQL-条件排序,sql,postgresql,sorting,sql-order-by,Sql,Postgresql,Sorting,Sql Order By,我有下表: 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 我需要以下排序: 首先,所有带有标志=false的行。这些行
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
我需要以下排序:
- 首先,所有带有
标志=false的行。这些行必须按
排序日期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
是否会保持行的排序,从而将两个内部查询的输出连接起来
我不知道如何根据条件重复排序依据中的列
更新
可以在这里找到Fiddle:条件顺序可以通过
CASE
执行,如下所示:
select *
from test
order by
flag
, case when flag then date end desc
, case when not flag then date end asc
有条件的排序是通过
CASE
smth完成的,就像order by flag,CASE when flag然后date end desc,CASE when not flag然后date end asc