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

MySQL 뷰(View)를 GROUP BY 절로 생성하고 활용하는 방법

GROUP BY 절을 사용하면 특정 열의 값을 그룹으로 묶을 수 있으며, 필요하다면 그룹화된 데이터를 대상으로 다양한 계산을 수행할 수 있습니다. 그룹화된 열에는 COUNT, SUM, AVG 같은 집계 함수를 자유롭게 적용할 수 있습니다.

뷰(View)와 함께 GROUP BY 절이 어떻게 동작하는지 이해하기 위해, 다음과 같은 데이터를 가진 기본 테이블 Student_info를 이용해 Info라는 이름의 뷰를 만들어 보겠습니다.

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  |
+------+---------+------------+------------+
6 rows in set (0.00 sec)

기본 문법

Create or Replace View view_name AS Select_statements FROM table GROUP BY expression1, expression2, ... expression_n;

CREATE OR REPLACE VIEW 구문은 지정한 이름의 뷰가 이미 존재하면 새 정의로 교체하고, 없으면 새로 생성합니다. 따라서 기존 뷰를 수정할 때 별도로 삭제(DROP)하지 않아도 되는 편리한 방식입니다.

예제 1: 단일 열로 그룹화하기

먼저 과목(Subject) 열을 기준으로 학생 수를 집계하는 뷰를 생성해 보겠습니다.

mysql> Create or Replace View Info AS select Subject, COUNT(*) FROM Student_info GROUP BY Subject;
Query OK, 0 rows affected (0.10 sec)

mysql> Select * from info;
+------------+----------+
| Subject    | COUNT(*) |
+------------+----------+
| Computers  |    3     |
| Economics  |    1     |
| History    |    1     |
| Literature |    1     |
+------------+----------+
4 rows in set (0.00 sec)

결과를 보면 과목별로 행이 묶여 각 과목을 선택한 학생 수가 한눈에 확인됩니다. 'Computers' 과목은 3명, 나머지 과목은 각각 1명씩입니다.

예제 2: 두 개 이상의 열로 그룹화하기

GROUP BY 절에는 여러 개의 열을 지정할 수도 있습니다. 아래 쿼리는 과목(Subject)과 이름(Name), 두 개의 열을 기준으로 그룹화합니다.

mysql> Create or Replace View Info AS select Subject,Name, COUNT(Subject) FROM Student_info GROUP BY Subject, Name;
Query OK, 0 rows affected (0.05 sec)

mysql> Select * from info;
+------------+---------+----------------+
| Subject    | Name    | COUNT(Subject) |
+------------+---------+----------------+
| Computers  | Mohan   |       1        |
| Computers  | Ram     |       1        |
| Computers  | Raman   |       1        |
| Economics  | Shyam   |       1        |
| History    | YashPal |       1        |
| Literature | Gaurav  |       1        |
+------------+---------+----------------+
6 rows in set (0.00 sec)

위 결과 집합은 GROUP BY 절이 열 값의 조합을 기준으로 여러 행을 하나의 요약 행(summary row) 집합으로 묶어 준다는 것을 잘 보여줍니다. 즉, 첫 번째 열뿐 아니라 두 번째, 세 번째 열까지 조합 순서대로 그룹이 형성되므로, 더 세분화된 통계 정보가 필요할 때 유용하게 활용할 수 있습니다.