求每个课程前两名的MySQL做法

SQL成绩排名查询
本文介绍了一种使用SQL查询实现成绩排名的方法,通过自连接和子查询,筛选出每个课程中成绩排名前二的学生记录。

表结构如下

/*!40101 SET NAMES utf8 */;

create table `grade` (
    `sid` int ,
    `cid` int ,
    `ac` int 
); 
insert into `grade` (`sid`, `cid`, `ac`) values('1','1','99');
insert into `grade` (`sid`, `cid`, `ac`) values('2','1','98');
insert into `grade` (`sid`, `cid`, `ac`) values('3','2','100');
insert into `grade` (`sid`, `cid`, `ac`) values('4','2','100');
insert into `grade` (`sid`, `cid`, `ac`) values('5','2','98');
insert into `grade` (`sid`, `cid`, `ac`) values('7','1','97');

 

解决办法如下:


SELECT sid ,cid ,ac FROM grade AS a
WHERE (SELECT COUNT(*) FROM grade AS b  WHERE a.cid=b.`cid` AND a.`ac`<=b.`ac` )<=2
ORDER BY a.`cid`,a.`ac` DESC;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值