大家可以根据我的插入的数据创建个表结构,然后把我的数据插入进去,方便点。
INSERT INTO `courses`(`student`, `class`) VALUES ('A', '数学'); INSERT INTO `courses`(`student`, `class`) VALUES ('B', '数学'); INSERT INTO `courses`(`student`, `class`) VALUES ('C', '数学'); INSERT INTO `courses`(`student`, `class`) VALUES ('D', '数学'); INSERT INTO `courses`(`student`, `class`) VALUES ('E', '英语'); INSERT INTO `courses`(`student`, `class`) VALUES ('F', '英语'); INSERT INTO `courses`(`student`, `class`) VALUES ('H', '语文');插入完的数据大致长这样:
正确的sql写法:
SELECT class FROM courses GROUP BY class HAVING COUNT(student)>=2这里先大致阐述下,今天这道题没做出来的原因,主要是 HAVING这个关键字忘记了,我们先上补下这个知识点:
1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。 2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件 中不能包含聚组函数,使用where条件显示特定的行。 3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。这里又出现了几个可能大家不熟悉的名词,
聚合函数:count(),sum().avg()组:我个人理解,即抛开having 条件,查询出来的结果集叫组,having可以对这些组进行数据过滤,理解了这几个概念,这题也就没悬念了