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