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

MySQL에서 두 열 중 가장 큰 값을 기준으로 정렬하는 방법 – GREATEST() 함수 활용

MySQL에서 한 행에 있는 두 개의 열 값을 비교한 뒤, 그중 더 큰 값을 기준으로 결과를 정렬해야 하는 경우가 있습니다. 예를 들어 최저가와 최고가, 두 시험 점수 중 높은 점수 등을 기준으로 데이터를 정렬할 때 유용합니다.

이럴 때는 GREATEST() 함수를 사용하면 됩니다. GREATEST()는 인자로 전달된 여러 값 중 가장 큰 값을 반환하는 함수로, ORDER BY 절과 함께 사용하면 두 열 중 큰 값을 기준으로 손쉽게 정렬할 수 있습니다.

1. 테이블 생성하기

먼저 두 개의 정수형 열을 가진 테이블을 생성합니다.

mysql> create table DemoTable834(
   Value1 int,
   Value2 int
);
Query OK, 0 rows affected (1.50 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable834 values(10,20);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable834 values(40,50);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable834 values(20,24);
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable834 values(30,10);
Query OK, 1 row affected (0.14 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable834;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+--------+--------+
| Value1 | Value2 |
+--------+--------+
|     10 |     20 |
|     40 |     50 |
|     20 |     24 |
|     30 |     10 |
+--------+--------+
4 rows in set (0.00 sec)

4. GREATEST() 함수로 두 열 중 큰 값 기준 정렬하기

다음은 GREATEST() 함수를 활용해 두 열(Value1, Value2) 중 더 큰 값을 기준으로 내림차순 정렬하는 쿼리입니다.

mysql> select *from DemoTable834
order by greatest(Value1,Value2) DESC;

실행 결과는 다음과 같습니다.

+--------+--------+
| Value1 | Value2 |
+--------+--------+
|     40 |     50 |
|     30 |     10 |
|     20 |     24 |
|     10 |     20 |
+--------+--------+
4 rows in set (0.00 sec)

결과를 보면 각 행에서 두 값 중 큰 값(50, 30, 24, 20)을 기준으로 내림차순 정렬된 것을 확인할 수 있습니다. 오름차순으로 정렬하고 싶다면 DESC 대신 ASC를 사용하면 됩니다.

참고: NULL 값 처리 주의사항

GREATEST() 함수는 인자 중 하나라도 NULL이 포함되면 NULL을 반환한다는 점에 유의해야 합니다. 열에 NULL 값이 있을 수 있다면 다음과 같이 COALESCE()를 함께 사용해 안전하게 처리하는 것이 좋습니다.

mysql> select *from DemoTable834
order by greatest(coalesce(Value1,0), coalesce(Value2,0)) DESC;

이렇게 하면 NULL 값이 0으로 대체되어 정렬 결과가 의도대로 나타납니다.