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

MySQL GROUP BY와 MAX()로 학생 이름별 최대 나이 구하는 방법

개요

MySQL에서 동일한(또는 유사한) 학생 이름이 여러 번 등록되어 있을 때, 이름별로 그룹화하여 각 학생의 최대 나이를 조회해야 하는 경우가 자주 있습니다. 이럴 때 GROUP BY 절과 집계 함수 MAX()를 함께 사용하면 간단하게 해결할 수 있습니다.

아래에서 예제 테이블 생성부터 데이터 삽입, 그리고 최대 나이를 조회하는 전체 과정을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성하기

먼저 학생 이름과 나이를 저장할 테이블을 생성합니다.

mysql> create table DemoTable1964
    (
    StudentName varchar(20),
    StudentAge int
    );
Query OK, 0 rows affected (0.00 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용하여 몇 개의 레코드를 추가합니다. 의도적으로 'Chris'와 'David'의 이름을 중복해서 입력했습니다.

mysql> insert into DemoTable1964 values('Chris',23);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1964 values('David',34);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1964 values('Chris',27);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1964 values('Sam',31);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1964 values('David',32);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1964 values('David',37);
Query OK, 1 row affected (0.00 sec)

3. 전체 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1964;

실행 결과는 다음과 같습니다.

+-------------+------------+
| StudentName | StudentAge |
+-------------+------------+
| Chris       |         23 |
| David       |         34 |
| Chris       |         27 |
| Sam         |         31 |
| David       |         32 |
| David       |         37 |
+-------------+------------+
6 rows in set (0.00 sec)

테이블을 보면 'Chris'는 2번, 'David'는 3번 중복되어 있는 것을 확인할 수 있습니다.

4. 이름별 최대 나이 조회하기

이제 핵심 쿼리입니다. GROUP BY로 학생 이름을 그룹화하고, MAX() 함수로 각 그룹의 최대 나이를 계산합니다.

mysql> select StudentName,max(StudentAge) from DemoTable1964 group by StudentName;

실행 결과는 다음과 같습니다.

+-------------+-----------------+
| StudentName | max(StudentAge) |
+-------------+-----------------+
| Chris       |              27 |
| David       |              37 |
| Sam         |              31 |
+-------------+-----------------+
3 rows in set (0.00 sec)

결과 분석

  • Chris: 23세와 27세 중 최댓값인 27세
  • David: 34세, 32세, 37세 중 최댓값인 37세
  • Sam: 레코드가 하나뿐이므로 31세

추가 팁: 별칭(Alias) 활용하기

결과 컬럼명을 더 읽기 좋게 만들고 싶다면 AS 키워드로 별칭을 지정할 수 있습니다.

mysql> select StudentName, max(StudentAge) as MaxAge 
    -> from DemoTable1964 
    -> group by StudentName;

이렇게 하면 결과 컬럼이 'MaxAge'로 표시되어 가독성이 향상됩니다.

정리

중복된 이름이 있는 데이터에서 그룹별 최댓값을 구할 때는 GROUP BY + MAX() 조합이 가장 기본적이고 효율적인 방법입니다. 같은 원리로 MIN()(최솟값), AVG()(평균값), COUNT()(레코드 수) 등 다른 집계 함수도 함께 활용할 수 있으니 상황에 맞게 응용해 보시기 바랍니다.