MySQL에서는 ORDER BY FIELD() 함수를 사용해 특정 값의 순서대로 결과를 정렬할 수 있지만, PostgreSQL에는 이 함수가 존재하지 않습니다. 다행히 CASE 표현식을 활용하면 동일한 기능을 손쉽게 구현할 수 있습니다.
이 글에서는 온라인 컴파일러로 PostgreSQL을 실행하여 그 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 정렬 실습에 사용할 테이블을 생성합니다.
create table PostgreOrderIdDemo ( countryName varchar(20) );
2단계: 데이터 삽입
INSERT 명령어를 이용해 샘플 데이터를 입력합니다.
insert into PostgreOrderIdDemo values('IND');
insert into PostgreOrderIdDemo values('US');
insert into PostgreOrderIdDemo values('UK');3단계: CASE문을 활용한 정렬 문법
PostgreSQL에서 FIELD()와 같은 사용자 지정 정렬을 구현하려면 아래와 같이 CASE 문에 원하는 순서 번호를 부여하고 이를 기준으로 정렬하면 됩니다.
SELECT * FROM yourTableName ORDER BY CASE WHEN columnName='IND' THEN 1 WHEN columnName='US' THEN 2 WHEN columnName='UK' THEN 3 ELSE 0 END,columnName;
여기서 각 값에 매핑된 숫자(1, 2, 3)가 곧 정렬 우선순위가 되며, 목록에 없는 값은 ELSE 0 덕분에 가장 앞쪽에 배치됩니다. 마지막의 columnName은 동일한 우선순위 내에서 알파벳순으로 2차 정렬을 수행하는 역할입니다.
예제 실행
실제 테이블에 위 문법을 적용해 보겠습니다.
SELECT * FROM PostgreOrderIdDemo ORDER BY CASE WHEN countryName='IND' THEN 1 WHEN countryName='US' THEN 2 WHEN countryName='UK' THEN 3 ELSE 0 END,countryName;
실행 결과
쿼리를 실행하면 IND → US → UK 순서로 지정된 우선순위대로 데이터가 정렬되어 출력되는 것을 확인할 수 있습니다.
이처럼 PostgreSQL에서는 CASE 표현식 하나만으로 MySQL의 ORDER BY FIELD() 기능을 완벽하게 대체할 수 있습니다. 정렬 순서가 자주 바뀌는 경우에는 값을 별도의 매핑 테이블로 관리하고 JOIN하는 방식도 고려해 보시기 바랍니다.