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

本文介绍了如何在MySQL中处理一对多表关系,查询学生总成绩排行。给定学生表(users)和课程成绩表,通过SQL查询获取总成绩前10名的学生,例如:小明(总成绩200)和小花(总成绩180)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设有学生表(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会将-复制出来匹配多的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值