Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách chọn 2 hàng đầu tiên cho mỗi nhóm trong MySQL

Để chọn top 2 hàng từ mỗi nhóm, dùng điều kiện WHERE với subquery.

Tạo bảng:

mysql> create table selectTop2FromEachGroup    -> (    -> Name varchar(20),    -> TotalScores int    -> ); Query OK, 0 rows affected (0.80 sec)

Chèn dữ liệu:

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)

Hiển thị dữ liệu:

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)

Truy vấn lấy top 2 mỗi nhóm:

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)