數據表結構和數據如下:
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;