面试题:用一条SQL语句查询出每门课都大于80分的学生姓名

数据表结构和数据如下:

CREATE TABLE `grade` (
  `id` int(4) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id主键',
  `username` varchar(255) NOT NULL COMMENT '学生姓名',
  `coursename` varchar(255) NOT NULL COMMENT '课程名称',
  `score` tinyint(4) NOT NULL COMMENT '分数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COMMENT='grade 学生成绩信息表';
INSERT INTO `grade` VALUES (1, '张三', '语文', 81);
INSERT INTO `grade` VALUES (2, '张三', '数学', 75);
INSERT INTO `grade` VALUES (3, '李四', '语文', 76);
INSERT INTO `grade` VALUES (4, '李四', '数学', 90);
INSERT INTO `grade` VALUES (5, '王五', '语文', 81);
INSERT INTO `grade` VALUES (6, '王五', '数学', 100);
INSERT INTO `grade` VALUES (7, '王五', '英语', 90);
INSERT INTO `grade` VALUES (8, '张三', '数学', 75);

问题1:用一条SQL语句查询出每门课都大于80分的学生姓名

  分析:查询每门课都大于80分,即学生min(score)>80,并且按学生姓名username分组排序

  方法一:

SELECT username FROM grade GROUP BY username HAVING MIN(score) > 80;

  方法二:

SELECT DISTINCT username FROM grade WHERE username NOT IN (SELECT DISTINCT username FROM grade WHERE score <= 80);

问题2::查询平均分大于80的学生的姓名

SELECT username FROM grade GROUP BY username HAVING AVG(score) > 80;

猜你喜欢

转载自www.cnblogs.com/haohaospace/p/12553947.html