각 그룹에서 상위 2개 행을 선택하려면 하위 쿼리와 함께 where 조건을 사용합니다. 테이블을 만들어 봅시다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table selectTop2FromEachGroup -> ( -> Name varchar(20), -> TotalScores int -> ); Query OK, 0 rows affected (0.80 sec)
이제 insert 명령을 사용하여 테이블에 일부 레코드를 삽입하십시오. 쿼리는 다음과 같습니다.
mysql> insert into selectTop2FromEachGroup values('John',32); Query OK, 1 row affected (0.38 sec) mysql> insert into selectTop2FromEachGroup values('John',33); Query OK, 1 row affected (0.21 sec) mysql> insert into selectTop2FromEachGroup values('John',34); Query OK, 1 row affected (0.17 sec) mysql> insert into selectTop2FromEachGroup values('Carol',35); Query OK, 1 row affected (0.17 sec) mysql> insert into selectTop2FromEachGroup values('Carol',36); Query OK, 1 row affected (0.14 sec) mysql> insert into selectTop2FromEachGroup values('Carol',37); Query OK, 1 row affected (0.15 sec)
select 문을 사용하여 테이블의 모든 레코드를 표시합니다. 쿼리는 다음과 같습니다.
mysql> select *from selectTop2FromEachGroup;
다음은 출력입니다.
+-------+-------------+ | Name | TotalScores | +-------+-------------+ | John | 32 | | John | 33 | | John | 34 | | Carol | 35 | | Carol | 36 | | Carol | 37 | +-------+-------------+ 6 rows in set (0.00 sec)
다음은 where 조건과 하위 쿼리를 사용하여 각 그룹에서 상위 2개 행을 선택하는 쿼리입니다.
mysql> select *from selectTop2FromEachGroup tbl -> where -> ( -> SELECT COUNT(*) -> FROM selectTop2FromEachGroup tbl1 -> WHERE tbl1.Name = tbl.Name AND -> tbl1.TotalScores >= tbl.TotalScores -> ) <= 2 ;
다음은 출력입니다.
+-------+-------------+ | Name | TotalScores | +-------+-------------+ | John | 33 | | John | 34 | | Carol | 36 | | Carol | 37 | +-------+-------------+ 4 rows in set (0.06 sec)