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

집계 함수 없이 GROUP BY 절을 사용하면 어떻게 동작할까?

집계 함수 없이 GROUP BY 절의 동작 방식

SELECT 문에서 GROUP BY 절을 집계 함수 없이 사용하면, MySQL은 이를 DISTINCT 절과 거의 같은 방식으로 처리합니다. 즉, 지정한 열에서 중복된 값을 제거하고 고유한 값만 반환하는 것입니다. 예를 들어 다음과 같은 테이블이 있다고 가정해 보겠습니다.

mysql> Select * from Student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Chandigarh | Literature |
| 125  | Raman   | Shimla     | Computers  |
| 130  | Ram     | Jhansi     | Computers  |
| 132  | Shyam   | Chandigarh | Economics  |
| 133  | Mohan   | Delhi      | Computers  |
| 150  | Saurabh | NULL       | Literature |
+------+---------+------------+------------+
7 rows in set (0.00 sec)

DISTINCT 절 사용 예시

'Address' 열에 DISTINCT 절을 적용하면 MySQL은 다음과 같은 결과 집합을 반환합니다.

mysql> Select DISTINCT ADDRESS from Student_info;
+------------+
| ADDRESS    |
+------------+
| Amritsar   |
| Chandigarh |
| Shimla     |
| Jhansi     |
| Delhi      |
| NULL       |
+------------+
6 rows in set (0.07 sec)

GROUP BY 절 사용 예시

이번에는 GROUP BY 절을 사용해 보겠습니다. DISTINCT를 사용했을 때와 동일한 결과 집합을 얻을 수 있습니다.

mysql> Select ADDRESS from Student_info GROUP BY Address;
+------------+
| ADDRESS    |
+------------+
| NULL       |
| Amritsar   |
| Chandigarh |
| Delhi      |
| Jhansi     |
| Shimla     |
+------------+
6 rows in set (0.00 sec)

DISTINCT와 GROUP BY의 차이점

두 결과 집합을 자세히 비교해 보면 한 가지 차이점을 발견할 수 있습니다. GROUP BY 절을 사용한 쿼리의 결과는 값이 정렬된 상태로 반환되는 반면, DISTINCT 절을 사용한 쿼리의 결과는 별도로 정렬되지 않은 상태로 반환됩니다.

다만 참고할 점이 있습니다. MySQL 8.0부터는 GROUP BY의 암시적 정렬이 더 이상 보장되지 않습니다. 따라서 정렬된 결과가 반드시 필요하다면 GROUP BY나 DISTINCT 어느 쪽이든 ORDER BY 절을 명시적으로 함께 사용하는 것이 안전하고 권장되는 방법입니다.