학생 테이블에서 같은 나이의 학생이 몇 명인지 세고 싶다면 COUNT(*) 함수와 GROUP BY 절을 함께 사용하면 됩니다. COUNT(*)는 각 그룹에 속한 행의 개수를 세어주고, GROUP BY는 특정 컬럼(여기서는 나이)을 기준으로 데이터를 그룹화해 줍니다.
실제 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 학생 ID와 나이를 저장할 테이블을 생성합니다.
mysql> create table DemoTable
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentAge int
);
Query OK, 0 rows affected (0.59 sec)2. 샘플 데이터 삽입하기
INSERT 문을 사용해 다양한 나이의 학생 레코드를 입력합니다.
mysql> insert into DemoTable(StudentAge) values(16); mysql> insert into DemoTable(StudentAge) values(17); mysql> insert into DemoTable(StudentAge) values(18); mysql> insert into DemoTable(StudentAge) values(17); mysql> insert into DemoTable(StudentAge) values(17); mysql> insert into DemoTable(StudentAge) values(17); mysql> insert into DemoTable(StudentAge) values(18); mysql> insert into DemoTable(StudentAge) values(18); mysql> insert into DemoTable(StudentAge) values(19); mysql> insert into DemoTable(StudentAge) values(19); mysql> insert into DemoTable(StudentAge) values(16); mysql> insert into DemoTable(StudentAge) values(16); mysql> insert into DemoTable(StudentAge) values(15);
3. 전체 데이터 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+------------+ | StudentId | StudentAge | +-----------+------------+ | 1 | 16 | | 2 | 17 | | 3 | 18 | | 4 | 17 | | 5 | 17 | | 6 | 17 | | 7 | 18 | | 8 | 18 | | 9 | 19 | | 10 | 19 | | 11 | 16 | | 12 | 16 | | 13 | 15 | +-----------+------------+ 13 rows in set (0.00 sec)
4. 나이별 빈도 계산 쿼리
이제 핵심인 나이별 학생 수(빈도)를 계산하는 쿼리입니다. StudentAge 컬럼으로 그룹화한 뒤 각 그룹의 개수를 COUNT(*)로 집계하고, 별칭(Alias)을 사용해 결과 컬럼 이름을 AgeFrequency로 지정했습니다.
mysql> select StudentAge,count(*) AS `AgeFrequency` from DemoTable group by StudentAge;
실행하면 다음과 같은 결과가 출력됩니다.
+------------+--------------+ | StudentAge | AgeFrequency | +------------+--------------+ | 16 | 3 | | 17 | 4 | | 18 | 3 | | 19 | 2 | | 15 | 1 | +------------+--------------+ 5 rows in set (0.05 sec)
결과 해석
위 결과를 보면 15세 학생은 1명, 16세와 18세 학생은 각각 3명, 17세 학생은 4명, 19세 학생은 2명임을 한눈에 확인할 수 있습니다.
참고로, 빈도가 많은 순서대로 정렬하고 싶다면 쿼리 끝에 ORDER BY AgeFrequency DESC를 추가하면 됩니다. 이처럼 COUNT(*)와 GROUP BY의 조합은 카테고리별 통계를 구할 때 가장 기본적이면서도 강력하게 활용되는 패턴입니다.