考虑以下数据:
---+-----------+-------+--+
| id | name | grade | |
+----+-----------+-------+--+
| 13 | Maria | 10 | |
| 18 | Lorenzo | 10 | |
| 2 | Cissa | 10 | |
| 3 | Neto | 9 | |
| 15 | Gabriel | 9 | |
| 10 | Laura | 9 | |
| 12 | Joãozinho | 8 | |
| 16 | Sergio | 8 | |
| 8 | Adriele | 8 | |
| 6 | Jorgito | 8 | |
| 5 | Aline | 8 | |
| 1 | Cintia | 8 | |
| 19 | Fabiana | 7 | |
| 11 | Vinicius | 7 | |
| 9 | Tatiane | 7 | |
| 7 | Chico | 7 | |
| 4 | Marcos | 7 | |
| 14 | Pedro | 6 | |
| 17 | Mauricio | 6 | |
| 20 | Leonardo | 6 | |
+----+-----------+-------+--+
我需要成绩最好的三个学生。我认为我需要按年级对数据进行分组,并限制为前 3 组。
“SELECT * FROM Student GROUP BY Grade LIMIT 3”只给了我 3 行,这不是我想要的。
我尝试使用 HAVING 来过滤组,但没有成功。我不想设置过滤器等级>MAX(等级)-2,因为理论上我不会知道等级。但这个过滤器无论如何都不起作用。
我正在使用 MySQL。请帮忙!
最佳答案
您可以使用加入
来执行此操作:
select s.*
from student s join
(select grade
from student
group by grade
order by grade desc
limit 3
) g3
on s.grade = g3.grade;
在大多数数据库中,您可以使用 in
执行此操作:
select s.*
from student s
where s.grade in (select grade
from student
group by grade
order by grade desc
limit 3
);
但是,MySQL 似乎拒绝这种语法。
关于mysql - 选择具有三个最大值的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35772812/