有以下两张表:A记录了学生的成绩,B记录了学生的基本信息。
表A :Id,course,score(学号, 学科, 成绩)
001 语文 90
001 数学 85
002 语文 93
002 数学 99
。。。
表B :Id,name,class (学号, 姓名, 班级)
001 张三 一年级一班
002 李四 一年级一班
。。。
请写一段sql, 将class为[一年级一班] 每门成绩最高的同学id和姓名以及学科和分数打印出来
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for A
-- ----------------------------
DROP TABLE IF EXISTS `A`;
CREATE TABLE `A` (
`Id` varchar(3) DEFAULT NULL,
`course` varchar(255) DEFAULT NULL,
`score` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of A
-- ----------------------------
INSERT INTO `A` VALUES ('001', '语文', '95');
INSERT INTO `A` VALUES ('001', '数学', '85');
INSERT INTO `A` VALUES ('002', '语文', '93');
INSERT INTO `A` VALUES ('002', '数学', '99');
-- ----------------------------
-- Table structure for B
-- ----------------------------
DROP TABLE IF EXISTS `B`;
CREATE TABLE `B` (
`Id` varchar(3) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`class` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of B
-- ----------------------------
INSERT INTO `B` VALUES ('001', '张三', '一年级一班');
INSERT INTO `B` VALUES ('002', '李四', '一年级一班');
查询语句:
SELECT
A.id,
B. NAME,
A.course,
A.score
FROM
A
JOIN B ON A.Id = B.Id
JOIN (
SELECT
course,
max(score) AS ms
FROM
A
JOIN B ON A.Id = B.Id
WHERE
class = "一年级一班"
GROUP BY
course
) C ON A.course = C.course
AND A.score = C.ms
WHERE
class = "一年级一班";
- 先查询括号里边的最单科目高分(分组:course)将查询结果给命名为中间表C
- 拿最高分连接查询A 查询出最高成绩对应的其他信息(id, course, score)
- 拿成绩对应的学生Id 连接查询 B表中的信息 (主要是 B . name)
- 返回数据