Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL에서 각 그룹의 상위 2개 행을 선택하는 방법은 무엇입니까?

<시간/>

각 그룹에서 상위 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)