在MySQL中如何选择每个组中的前2行?

在MySQL中如何选择每个组中的前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条件和子查询选择每个组中前两行的查询:

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)

阅读更多:MySQL 教程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程