目录:
一、需求
二、建表语句插入数据
三、表内容展示
四、结果展示
五、三种mySQL查询的方式
一、需求
有表 如下,要求取出各班前两名(允许并列)
二、建表语句插入数据
CREATE TABLE topn_yh(
id int not null primary key,
SName VARCHAR(20),
ClsNo VARCHAR(20),
Score VARCHAR(20)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (1,'AAAA','C1','67');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (2,'BBBB','C1','55');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (3,'CCCC','C1','67');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (4,'DDDD','C1','65');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (5,'EEEE','C1','95');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (6,'FFFF','C2','57');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (7,'GGGG','C2','87');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (8,'HHHH','C2','74');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (9,'IIII','C2','52');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (10,'JJJJ','C2','81');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (11,'KKKK','C2','67');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (12,'LLLL','C2','66');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (13,'MMMM','C2','63');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (14,'NNNN','C3','99');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (15,'OOOO','C3','50');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (16,'PPPP','C3','59');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (17,'QQQQ','C3','66');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (18,'RRRR','C3','76');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (19,'SSSS','C3','50');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (20,'TTTT','C3','50');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (21,'UUUU','C3','64');
INSERT INTO topn_yh(id , SName,ClsNo,Score) values (22,'VVVV','C3','74');
三、表内容展示
id | SName | ClsNo | Score |
---|---|---|---|
1 | AAAA | C1 | 67 |
2 | BBBB | C1 | 55 |
3 | CCCC | C1 | 67 |
4 | DDDD | C1 | 65 |
5 | EEEE | C1 | 95 |
6 | FFFF | C2 | 57 |
7 | GGGG | C2 | 87 |
8 | HHHH | C2 | 74 |
9 | IIII | C2 | 52 |
10 | JJJJ | C2 | 81 |
11 | KKKK | C2 | 67 |
12 | LLLL | C2 | 66 |
13 | MMMM | C2 | 63 |
14 | NNNN | C3 | 99 |
15 | OOOO | C3 | 50 |
16 | PPPP | C3 | 59 |
17 | QQQQ | C3 | 66 |
18 | RRRR | C3 | 76 |
19 | SSSS | C3 | 50 |
20 | TTTT | C3 | 50 |
21 | UUUU | C3 | 64 |
22 | VVVV | C3 | 74 |
四、结果展示
id | SName | ClsNo | Score |
---|---|---|---|
5 | EEEE | C1 | 95 |
1 | AAAA | C1 | 67 |
3 | CCCC | C1 | 67 |
7 | GGGG | C2 | 87 |
10 | JJJJ | C2 | 81 |
14 | NNNN | C3 | 99 |
18 | RRRR | C3 | 76 |
五、三种mySQL查询的方式
方法一:
select a.id,a.SName,a.ClsNo,a.Score
from topn_yh a left join topn_yh b on a.ClsNo=b.ClsNo and a.Score<b.Score
group by a.id,a.SName,a.ClsNo,a.Score
having count(b.id)<2
order by a.ClsNo,a.Score desc
方法二:
select *
from topn_yh a
where 2>(select count(*) from topn_yh where ClsNo=a.ClsNo and Score>a.Score)
order by a.ClsNo,a.Score desc
方法三:
select *
from topn_yh a
where id in (select id from topn_yh where ClsNo=a.ClsNo order by Score desc limit 2)
order by a.ClsNo,a.Score desc