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

MySQL에서 두 열의 DISTINCT 값 선택하기 – least()와 greatest() 함수 활용법

MySQL에서 두 개의 열에 걸쳐 중복되지 않는(DISTINCT) 값을 선택하려면 least()greatest() 함수를 함께 사용하면 됩니다. 이 방법은 두 열의 값을 서로 비교하여 작은 값과 큰 값을 각각 정렬한 뒤, 그 결과를 기준으로 고유한 조합만 추출하는 방식입니다.

1. 테스트용 테이블 생성하기

먼저 두 개의 열을 가진 테이블을 생성해 보겠습니다.

mysql> create table SelectDistinctTwoColumns
    -> (
    -> StudentId int,
    -> EmployeeId int
    -> );
Query OK, 0 rows affected (0.60 sec)

2. 레코드 삽입하기

이제 테이블에 데이터를 삽입합니다. 일부러 중복된 값과 순서가 뒤바뀐 값(예: 105,104)도 함께 넣어 DISTINCT 처리 과정을 확인해 보겠습니다.

mysql> insert into SelectDistinctTwoColumns values(100,101);
Query OK, 1 row affected (0.39 sec)

mysql> insert into SelectDistinctTwoColumns values(102,103);
Query OK, 1 row affected (0.13 sec)

mysql> insert into SelectDistinctTwoColumns values(104,105);
Query OK, 1 row affected (0.18 sec)

mysql> insert into SelectDistinctTwoColumns values(100,101);
Query OK, 1 row affected (0.14 sec)

mysql> insert into SelectDistinctTwoColumns values(102,103);
Query OK, 1 row affected (0.12 sec)

mysql> insert into SelectDistinctTwoColumns values(106,107);
Query OK, 1 row affected (0.36 sec)

mysql> insert into SelectDistinctTwoColumns values(104,105);
Query OK, 1 row affected (0.17 sec)

mysql> insert into SelectDistinctTwoColumns values(105,104);
Query OK, 1 row affected (0.35 sec)

3. 전체 데이터 확인하기

SELECT 문을 사용해 테이블의 모든 레코드를 조회합니다.

mysql> select *from SelectDistinctTwoColumns;

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

+-----------+------------+
| StudentId | EmployeeId |
+-----------+------------+
| 100       | 101        |
| 102       | 103        |
| 104       | 105        |
| 100       | 101        |
| 102       | 103        |
| 106       | 107        |
| 104       | 105        |
| 105       | 104        |
+-----------+------------+
8 rows in set (0.00 sec)

위 출력 결과를 보면 (100,101), (102,103), (104,105)처럼 중복된 행이 여러 개 존재하고, 마지막 행은 열 순서만 뒤바뀐 (105,104) 값임을 알 수 있습니다.

4. least()와 greatest()로 DISTINCT 값 추출하기

두 열의 고유한 값 조합을 구하려면 아래 쿼리를 실행합니다. least()는 두 값 중 작은 값을, greatest()는 큰 값을 반환하므로, 열 순서가 뒤바뀐 중복 데이터까지 하나의 조합으로 통일됩니다.

mysql> select distinct least(StudentId, EmployeeId) as FirstColumn,
    -> greatest(StudentId, EmployeeId) as SecondColumn from SelectDistinctTwoColumns;

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

+-------------+--------------+
| FirstColumn | SecondColumn |
+-------------+--------------+
|         100 |          101 |
|         102 |          103 |
|         104 |          105 |
|         106 |          107 |
+-------------+--------------+
4 rows in set (0.00 sec)

결과 정리

원래 8개의 행이 있었지만, least()와 greatest() 함수를 적용한 결과 중복이 모두 제거되어 단 4개의 고유한 값 조합만 남았습니다. 특히 (104,105)와 (105,104)처럼 순서만 다른 데이터도 동일한 조합으로 인식되어 하나로 병합된 점이 핵심입니다. 이처럼 least()와 greatest()를 DISTINCT와 함께 활용하면 두 열 간의 중복 데이터를 손쉽게 정리할 수 있습니다.