最近看了关于SQL相关的面试题,对于我这种2年没写复杂SQL语句的渣渣来说实在有点脑阔疼,题目内容大概为:
- 查询每个班级成绩最高的学生及其成绩
- 查询每个班级成绩第二的学生及其成绩
- 查询每个班级总分前三的学生
第一个查询一看就比较简单,难就难在第2和3个查询,因为分组后没有取第n或前n条数据的函数
由于是面试题,没有表结构,所以就随意脑补了一下建表代码:
CREATE TABLE `t_user_score` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(16) DEFAULT NULL,
`course_name` varchar(32) DEFAULT NULL,
`score` double DEFAULT NULL,
`class_name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
为了练习查询往表中插入如下数据:
INSERT INTO `t_user_score` VALUES ('1', '张三', '数学', '34', 'a');
INSERT INTO `t_user_score` VALUES ('2', '张三', '语文', '58', 'a');
INSERT INTO `t_user_score` VALUES ('3', '张三', '英语', '58', 'a');
INSERT INTO `t_user_score` VALUES ('4', '李四', '数学', '45', 'a');
INSERT INTO `t_user_score` VALUES ('5'