2017-04-10 9 views
1

주문 나는 다음과 같은 테이블이 있습니다PostgreSQL을 - 조건

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에서 열을 반복하는 방법을 모르겠다.

갱신

바이올린은 여기에서 찾을 수 있습니다 : http://rextester.com/FFOSS79584

+0

조건 주문이'CASE' –

+0

떨어지게 등으로 이루어집니다

select * from test order by flag , case when flag then date end desc , case when not flag then date end asc 
'플래그에 의한 순서, 플래그가있는 경우의 종료일, 종료하지 않을 때의 종료일, 오름차순의 종료일'http://rextester.com/FDAY76293 –

답변

2

조건 순서는 여기처럼 CASE을 수행 할 수 있습니다 :