Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

PostgreSQL에서 MySQL의 ORDER BY FIELD() 기능 구현하는 방법

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하는 방식도 고려해 보시기 바랍니다.