GROUP BY 절과 DISTINCT 절, 다중 열에서의 동작 방식
네, 가능합니다. MySQL의 GROUP BY 절은 DISTINCT 절을 사용할 때와 마찬가지로 여러 열과 함께 사용할 수 있습니다. 두 절 모두 지정된 열들의 조합을 기준으로 중복된 행을 제거한다는 공통점이 있습니다.
아래 예제를 통해 확인해 보겠습니다. 'testing' 테이블의 'Fname'과 'Lname' 두 열을 대상으로, 첫 번째 쿼리에서는 DISTINCT 절을, 두 번째 쿼리에서는 GROUP BY 절을 사용했습니다.
예제 테이블 확인
mysql> Select * from testing; +------+---------+---------+ | id | fname | Lname | +------+---------+---------+ | 200 | Raman | Kumar | | 201 | Sahil | Bhalla | | 202 | Gaurav | NULL | | 203 | Aarav | NULL | | 204 | Harshit | Khurana | | 205 | Rahul | NULL | | 206 | Piyush | Kohli | | 207 | Lovkesh | NULL | | 208 | Gaurav | Kumar | | 209 | Raman | Kumar | +------+---------+---------+ 10 rows in set (0.00 sec)
원본 테이블에는 총 10개의 행이 있으며, 그중 ('Raman', 'Kumar') 조합이 중복되어 있습니다. 따라서 중복을 제거하면 9개의 고유한 조합이 남게 됩니다.
DISTINCT 절을 사용한 경우
mysql> Select DISTINCT FNAME,LNAME from testing; +---------+---------+ | FNAME | LNAME | +---------+---------+ | Raman | Kumar | | Sahil | Bhalla | | Gaurav | NULL | | Aarav | NULL | | Harshit | Khurana | | Rahul | NULL | | Piyush | Kohli | | Lovkesh | NULL | | Gaurav | Kumar | +---------+---------+ 9 rows in set (0.00 sec)
GROUP BY 절을 사용한 경우
mysql> Select Fname, LNAME from testing GROUP BY Fname,Lname; +---------+---------+ | Fname | LNAME | +---------+---------+ | Aarav | NULL | | Gaurav | NULL | | Gaurav | Kumar | | Harshit | Khurana | | Lovkesh | NULL | | Piyush | Kohli | | Rahul | NULL | | Raman | Kumar | | Sahil | Bhalla | +---------+---------+ 9 rows in set (0.00 sec)
두 결과의 유일한 차이점
두 쿼리 모두 동일하게 9개의 행, 즉 중복이 제거된 결과를 반환합니다. 유일한 차이점은 결과의 정렬 여부입니다.
- GROUP BY 절: 그룹화 과정에서 내부적으로 정렬이 수행되므로, 결과 집합이 열 값 기준으로 정렬된 상태로 반환됩니다.
- DISTINCT 절: 별도의 ORDER BY 절이 없으면 결과가 정렬되지 않은 상태로 반환됩니다.
참고로 이러한 암묵적 정렬 동작은 MySQL 버전에 따라 다를 수 있으므로, 정렬된 결과가 필요하다면 명시적으로 ORDER BY 절을 함께 사용하는 것이 좋습니다.