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) 집합으로 묶어 준다는 것을 잘 보여줍니다. 즉, 첫 번째 열뿐 아니라 두 번째, 세 번째 열까지 조합 순서대로 그룹이 형성되므로, 더 세분화된 통계 정보가 필요할 때 유용하게 활용할 수 있습니다.