MySQL에서 특정 레코드를 우선 표시하고 나머지를 날짜순으로 정렬하기
MySQL에서는 ORDER BY 절을 활용하면 특정 조건에 해당하는 레코드를 최상단에 고정하고, 나머지 레코드들은 다른 컬럼(예: 날짜)을 기준으로 정렬할 수 있습니다.
기본 문법은 다음과 같습니다.
select * from yourTableName order by yourColumnName1=yourValue desc,yourColumnName2;
여기서 핵심은 yourColumnName1=yourValue라는 불리언 표현식입니다. 조건이 참인 레코드는 1, 거짓인 레코드는 0으로 평가되며, 내림차순(desc) 정렬 시 조건에 일치하는 레코드가 자연스럽게 앞쪽에 배치됩니다.
1. 테이블 생성
먼저 예제로 사용할 테이블을 생성합니다.
mysql> create table DemoTable1932
(
UserName varchar(20),
ShippingDate date
);
Query OK, 0 rows affected (0.00 sec)2. 데이터 삽입
insert 명령어를 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable1932 values('Chris','2018-10-12');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1932 values('David','2019-04-11');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1932 values('Mike','2016-12-04');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1932 values('Carol','2017-12-26');
Query OK, 1 row affected (0.00 sec)3. 전체 레코드 조회
select 문을 사용해 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable1932;
실행 결과는 다음과 같습니다.
+----------+--------------+ | UserName | ShippingDate | +----------+--------------+ | Chris | 2018-10-12 | | David | 2019-04-11 | | Mike | 2016-12-04 | | Carol | 2017-12-26 | +----------+--------------+ 4 rows in set (0.00 sec)
4. 특정 값을 우선 정렬하는 쿼리
이제 'David'라는 사용자를 맨 앞에 표시하고, 나머지 레코드는 배송일(ShippingDate) 오름차순으로 정렬하는 쿼리입니다.
mysql> select * from DemoTable1932
order by UserName='David' desc,ShippingDate;실행 결과는 다음과 같습니다.
+----------+--------------+ | UserName | ShippingDate | +----------+--------------+ | David | 2019-04-11 | | Mike | 2016-12-04 | | Carol | 2017-12-26 | | Chris | 2018-10-12 | +----------+--------------+ 4 rows in set (0.00 sec)
결과 분석
위 결과를 보면 'David'가 첫 번째 행에 위치하고, 나머지 레코드(Mike → Carol → Chris)는 배송일 순서대로(2016-12-04 → 2017-12-26 → 2018-10-12) 정렬된 것을 확인할 수 있습니다.
이 기법은 공지사항 상단 고정, VIP 고객 우선 노출 등 실무에서 자주 활용되는 정렬 방식이므로 꼭 익혀두면 유용합니다.