面接問題:SQL文で各授業が80点以上の学生の名前を検索します.
1622 ワード
データテーブルの構造とデータは次のとおりです.
質問1:1つのSQL文で各授業が80点より大きい学生の名前を検索する
分析:クエリーの各授業は80点より大きく、すなわち学生min(score)>80であり、学生名usernameグループでソートされます.
方法1:
方法2:
質問2:平均点数が80より大きい学生の名前を調べる
-- ----------------------------
-- Table structure for grade
-- ----------------------------
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 ';
-- ----------------------------
-- Records of 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:1つのSQL文で各授業が80点より大きい学生の名前を検索する
分析:クエリーの各授業は80点より大きく、すなわち学生min(score)>80であり、学生名usernameグループでソートされます.
方法1:
SELECT username FROM grade GROUP BY username HAVING MIN(score) > 80;
方法2:
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;