这种题目面试中经常出现,记录一下
首先建表
CREATE TABLE `students` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
`clss_id` varchar(2) DEFAULT NULL COMMENT '班级id',
`stu_name` varchar(16) DEFAULT NULL COMMENT '学生姓名',
`age` int(11) DEFAULT NULL COMMENT '学生年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
插入数据
insert into `students`(`id`,`clss_id`,`stu_name`,`age`) values
(1,'A','李明',90),
(2,'A','王磊',95),
(3,'A','孙科',100),
(4,'A','赵强',80),
(5,'A','王智',90),
(6,'B','李海',95),
(7,'B','王峰',84),
(8,'B','魏坤琳',77),
(9,'B','鲍云',96),
(10,'B','王昱珩',95),
(11,'C','马芸',92);
表如下
题目一: 求每个班级年龄(分数)最高的前三名
使用连接查询,连接条件:在同一个班级,s1.age<s2.age(分数最高的右表为null,因为不可能有比最高分还大的),然后根据id分组,找出分组后数量小于3的就是我们需要的结果
题目二: 将所有人的成绩从高到低排序
比100大的是0个,比96大的是1个...,然后按ranking asc排序即可
题目三: 取出所有成绩的前三名
这个相对简单一点,只要思路清晰,用子查询就能做出来