ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PostgreSQL] 조회조건 그대로 정렬하기 (Custom order by)
    DB/PostgreSQL 2018. 7. 28. 23:10

    정렬을 사용자가 원하는대로 하길 원하거나, WHERE절에 건 조건 그대로 정렬이 되기를 원할 때, 아래와 같은 방법으로 처리할 수 있습니다.


    1. array_position 사용하기

    PostgreSQL의 버전이 9.5 이상일 경우 array_position 함수를 사용하여 구현할 수 있습니다. 


    SELECT *
    FROM test 
    WHERE pk IN (1, 3, 4, 6, 2) 
    ORDER BY ARRAY_POSITION(ARRAY[1, 3, 4, 6, 2], pk)

    위 구문을 사용할 때 주의할 점은 array에 들어가는 데이터 타입과 조회를 하고자 하는 컬럼의 타입이 동일해야 합니다.

    • ARRAY_POSITION(ARRAY[1::bigint, 3::bigint], 1::int)   - 에러


    array_position(anyarray,anyelement [, int])란?
    두 번째에 입력된 인수를 첫 번째에 입력된 인수(어레이)에서 검색을 하며 첫 번째로 나온 값을 반환합니다.
    예시)
    array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'mon')   – 결과 2

    2. case ... when 사용하기

    PostgreSQL의 버전이 9.5이하이거나 다른 DB를 사용할 경우 order by 에 case when 구문을 사용하여 구현할 수 있습니다.

    SELECT * 
    FROM test 
    WHERE pk IN (1, 3, 4, 6, 2) 
    ORDER BY 
    CASE pk 
    WHEN 1 THEN 0
    WHEN 3 THEN 1
    WHEN 4 THEN 2
    WHEN 6 THEN 3
    WHEN 2 THEN 4
    ELSE 5
    END


    댓글