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

MySQL에서 같은 나이 학생 빈도 계산하기 – COUNT(*)와 GROUP BY 활용법

학생 테이블에서 같은 나이의 학생이 몇 명인지 세고 싶다면 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의 조합은 카테고리별 통계를 구할 때 가장 기본적이면서도 강력하게 활용되는 패턴입니다.