在成绩表中,取所有课程中,排名前n的的信息

本文介绍了一个SQL查询案例,通过联表查询及聚合函数实现对数据库中特定条件的数据进行排名筛选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`_id` int(11) NOT NULL AUTO_INCREMENT,
`classs` varchar(20) DEFAULT NULL,
`cores` int(64) DEFAULT NULL,
PRIMARY KEY (`_id`),
KEY `NAME_UN` (`classs`(4))
) ENGINE=InnoDB AUTO_INCREMENT=1212122 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('1', 'tt', '10');
INSERT INTO `test` VALUES ('11', 'tt', '12');
INSERT INTO `test` VALUES ('12', 'tt', '13');
INSERT INTO `test` VALUES ('111', 'w', '1');
INSERT INTO `test` VALUES ('133', 'tt', '14');
INSERT INTO `test` VALUES ('1212', 'w', '12');
INSERT INTO `test` VALUES ('12121', 'w', '121');
INSERT INTO `test` VALUES ('121212', 'w', '121');


select t2._id,t2.classs,t2.cores,count(*) from test t1 join test t2 on t1.classs=t2.classs
where t1.cores >= t2.cores
GROUP BY t2._id,t2.classs,t2.cores
HAVING count(t2._id) <= 2 (这里的数字‘2’是你想取值的数 比如排名前2)


t2._id t2.classs t2.cores count(*)
12 tt 13 2
133 tt 14 1
12121 w 121 2
121212 w 121 2
主键 班级 分数 排名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值