MySQL 有学生表和课程成绩表,求学生总成绩排行前10名

假设有学生表(users)

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', '小明');
INSERT INTO `users` VALUES ('2', '小虎');
INSERT INTO `users` VALUES ('3', '小花');
INSERT INTO `users` VALUES ('4', '小花');
INSERT INTO `users` VALUES ('5', '小花');
INSERT INTO `users` VALUES ('6', '小虎');

课程成绩表:

-- ----------------------------
-- Table structure for scores
-- ----------------------------
DROP TABLE IF EXISTS `scores`;
CREATE TABLE `scores` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `uid` bigint(20) DEFAULT NULL,
  `score` decimal(10,0) DEFAULT NULL,
  `type` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of scores
-- ----------------------------
INSERT INTO `scores` VALUES ('1', '1', '100', '语文');
INSERT INTO `scores` VALUES ('2', '1', '100', '数学');
INSERT INTO `scores` VALUES ('3', '3', '100', '语文');
INSERT INTO `scores` VALUES ('4', '3', '80', '数学');

求总成绩前10学生的名字

SELECT
	SUM( score ) AS total,
	a.NAME 
FROM
	users AS a
	LEFT JOIN scores AS b ON a.id = b.uid 
GROUP BY
NAME 
ORDER BY
	total DESC

结果:

total    name

200    小明
180    小花
 null    小虎

一对多的表关系时,mysql会将-复制出来匹配多的数据


版权声明:本文为qq_37126235原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。