mysql 查询每组的TOP N
时间: 2023-10-08 10:13:20 浏览: 38
如果想要在MySQL中查询每个组中排名前N的记录,可以使用子查询和变量。
以下是一个示例表格,名为scores,其中包含学生的ID,分数和班级信息:
```
id | score | class
-----------------------
1 | 85 | A
2 | 90 | A
3 | 92 | A
4 | 80 | B
5 | 85 | B
6 | 88 | B
```
如果想要查询每个班级中分数最高的两个学生,可以使用以下SQL语句:
```
SELECT id, score, class
FROM (
SELECT *,
@rn := IF(@prev = class, @rn + 1, 1) AS rn,
@prev := class
FROM scores
ORDER BY class, score DESC
) AS t
WHERE rn <= 2;
```
这个查询使用了一个子查询,其中使用了变量@rn和@prev,它们分别用于计算每个班级的排名和记录前一个班级的信息。子查询首先对整个表按照班级和分数进行排序,然后使用IF语句和变量计算出每个班级中每个学生的排名。最后,外部查询选择排名前两位的记录。
执行以上SQL语句后,得到的结果如下:
```
id | score | class
-----------------------
3 | 92 | A
2 | 90 | A
6 | 88 | B
5 | 85 | B
```
可以看到,查询结果显示了每个班级中分数最高的两个学生的信息。