数据表结构和数据如下:
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;