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

MySQL에서 상위 2개 최고 점수를 찾는 쿼리 작성 방법

MySQL에서 상위 2개 최고 점수를 찾는 방법

각 그룹별로 가장 높은 점수를 구한 뒤 상위 2개의 결과만 조회하려면 집계 함수 MAX()GROUP BY, 그리고 ORDER BY DESC를 함께 사용하면 됩니다.

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1383
-> (
-> Id int,
-> PlayerScore int
-> );
Query OK, 0 rows affected (0.90 sec)

테이블에 데이터 삽입하기

INSERT 명령어를 사용해 테이블에 샘플 데이터를 입력합니다.

mysql> insert into DemoTable1383 values(200,78);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1383 values(200,89);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1383 values(200,89);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1383 values(200,87);
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable1383 values(203,97);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1383 values(200,57);
Query OK, 1 row affected (0.17 sec)

저장된 전체 데이터 확인하기

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1383;

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

+------+-------------+
| Id | PlayerScore |
+------+-------------+
| 200 | 78 |
| 200 | 89 |
| 200 | 89 |
| 200 | 87 |
| 203 | 97 |
| 200 | 57 |
+------+-------------+
6 rows in set (0.00 sec)

그룹별 최고 점수 조회 쿼리

다음은 Id별로 그룹화하여 각 그룹의 최고 점수를 구하고, 점수가 높은 순서대로 정렬하는 쿼리입니다.

mysql> select Id,max(PlayerScore) from DemoTable1383 group by Id order by max(PlayerScore) DESC;

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

+------+------------------+
| Id | max(PlayerScore) |
+------+------------------+
| 203 | 97 |
| 200 | 89 |
+------+------------------+
2 rows in set (0.00 sec)

쿼리 동작 원리 설명

이 쿼리가 어떻게 동작하는지 단계별로 살펴보겠습니다.

1. GROUP BY Id: 동일한 Id를 가진 행들을 하나의 그룹으로 묶습니다. 위 예제에서는 Id 200과 Id 203 두 개의 그룹이 생성됩니다.

2. MAX(PlayerScore): 각 그룹 내에서 가장 큰 PlayerScore 값을 반환합니다. Id 200 그룹에서는 78, 89, 89, 87, 57 중 최댓값인 89가 선택되고, Id 203 그룹에서는 97이 선택됩니다.

3. ORDER BY max(PlayerScore) DESC: 계산된 최고 점수를 기준으로 내림차순 정렬하여, 가장 높은 점수부터 차례대로 출력합니다.

결과적으로 Id 203의 97점과 Id 200의 89점이라는 상위 2개의 최고 점수를 얻을 수 있습니다. 만약 그룹 수가 많아 상위 N개만 제한적으로 조회하고 싶다면 쿼리 끝에 LIMIT 2를 추가하면 됩니다.