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

MySQL GROUP BY 절을 여러 열에 적용하면 DISTINCT 절처럼 사용할 수 있을까?

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 절을 함께 사용하는 것이 좋습니다.