3 人赞同了该文章

数据表结构和数据如下:

CREATETABLE`grade`(`id`int(4)unsignedNOTNULLAUTO_INCREMENTCOMMENT'id主键',`username`varchar(255)NOTNULLCOMMENT'学生姓名',`coursename`varchar(255)NOTNULLCOMMENT'课程名称',`score`tinyint(4)NOTNULLCOMMENT'分数',PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=9DEFAULTCHARSET=utf8mb4COMMENT='grade 学生成绩信息表';INSERTINTO`grade`VALUES(1,'张三','语文',81);INSERTINTO`grade`VALUES(2,'张三','数学',75);INSERTINTO`grade`VALUES(3,'李四','语文',76);INSERTINTO`grade`VALUES(4,'李四','数学',90);INSERTINTO`grade`VALUES(5,'王五','语文',81);INSERTINTO`grade`VALUES(6,'王五','数学',100);INSERTINTO`grade`VALUES(7,'王五','英语',90);INSERTINTO`grade`VALUES(8,'张三','数学',75);
问题1:用一条SQL语句查询出每门课都大于80分的学生姓名
分析:查询每门课都大于80分,即学生min(score)>80,并且按学生姓名username分组排序
方法一:
SELECTusernameFROMgradeGROUPBYusernameHAVINGMIN(score)>80;
方法二:
SELECTDISTINCTusernameFROMgradeWHEREusernameNOTIN(SELECTDISTINCTusernameFROMgradeWHEREscore