sql练习——查询每个班级分数的前3名

下面是 建表语句

// 建表语句
CREATE TABLE `examination` (
  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `class` varchar(50) DEFAULT NULL COMMENT '班级',
  `student_name` varchar(50) DEFAULT NULL COMMENT '姓名',
  `score` double(4,2) DEFAULT NULL COMMENT '分数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8

方式一
– 每个班级分数前3名的名字查出来(没考虑分数相同的情况)

SELECT 		T1.*
FROM 		examination T1
WHERE		(SELECT COUNT(1) FROM examination WHERE T1.class = class AND T1.score < score) < 3
ORDER BY 	class,score DESC

方式二
– 每个班级分数前3名的名字查出来(考虑分数相同的情况)

	SELECT		T1.*,T2.class as CLASS2,T2.score AS SCORE2,COUNT(*)
	FROM 		examination T1
	LEFT  JOIN	(SELECT DISTINCT class, score FROM examination) T2
	ON 			T1.class = T2.class
 	AND 		T1.score <= T2.score 
	GROUP BY 	student_name,class,score
	HAVING		COUNT(*) < 4
	ORDER BY 	class,score DESC
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值