mysql 题目

有以下两张表: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 = "一年级一班";
  1. 先查询括号里边的最单科目高分(分组:course)将查询结果给命名为中间表C
  2. 拿最高分连接查询A 查询出最高成绩对应的其他信息(id, course, score)
  3. 拿成绩对应的学生Id 连接查询 B表中的信息 (主要是 B . name)
  4. 返回数据

猜你喜欢

转载自blog.csdn.net/sha_ka/article/details/87360059