SELECT DISTINCT, ORDER BY expressions must appear in select list


금일 sql 를 만지다가 마주한 문제이다. 전에도 겪었던 문제고 해결하는데 시간이 들진 않았지만 혹시 몰라 메모해둔다.

SELECT DISTINCT, ORDER BY expressions must appear in select list

간단하다. distinct 하여 출력한 필드 중에 order by 하려는 필드가 없다고 생각하면 된다.

order by 절은 distinct 가 적용된 후에 적용됨으로 해당하는 오류가 발생한다고 보면 될 것 같다.

결론: distinct 한 필드 안에 있는 필드로 order by 를 해야한다.

jsonb

예전에도 한 번 적었던 거 같기는 하지만 다시금 작성한다. jsonbArray 형태 안에 있거나 할 때는 아래처럼 접근이 가능하다.

-- 오른쪽과 같은 형태라면 [{a: 2, b: 4}, {c: 9}]

select
  (jsonb_array_col -> 1) ->> 'c'
from tmp_table

-- '9' 가 출력

-> 를 통해 인덱스로 접근하여 jsonb 형태로 꺼내고 원하는 속성 값을 문자열로 꺼낸다.
이 방법만 있는 것은 아니고 더 많은 방법은 아래 문서를 참조하면 좋을 것 같다.

참조문서: Postgresql - JSON Functions and Operators