Select 个具有三个最大值的组
Select groups with the three biggest values
考虑以下数据:
---+-----------+-------+--+
| 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 来过滤组,但没有成功。我不想设置filter grade>MAX(grade)-2,因为理论上我不会知道等级。但是这个过滤器无论如何都不起作用。
我正在使用 MySQL。请帮忙!
您可以使用 join
:
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 似乎拒绝这种语法。
select s1.*
from students s1
join (select distinct grade from students
order by grade desc limit 3) s2 on s1.grade = s2.grade
或者:
select *
from students
where grade >= (select distinct grade from students
order by grade desc limit 2,1)
select秒*
来自学生的加入
(select 前三名
来自学生
按年级分组
按年级排序
) g3
在 s.grade = g3.grade;
考虑以下数据:
---+-----------+-------+--+
| 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 来过滤组,但没有成功。我不想设置filter grade>MAX(grade)-2,因为理论上我不会知道等级。但是这个过滤器无论如何都不起作用。
我正在使用 MySQL。请帮忙!
您可以使用 join
:
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 似乎拒绝这种语法。
select s1.*
from students s1
join (select distinct grade from students
order by grade desc limit 3) s2 on s1.grade = s2.grade
或者:
select *
from students
where grade >= (select distinct grade from students
order by grade desc limit 2,1)
select秒*
来自学生的加入
(select 前三名
来自学生
按年级分组
按年级排序
) g3
在 s.grade = g3.grade;