一.语法:
二.实例:
表:
1.根据 性别 分组 , 统计 男性 和 女性 的员工数量:(1代表男性,2代表女性)
/*统计可用count函数,本题没条件限制 */
select gender,count(*) from tb_employee group by gender;
注:这里开头不是select * from,select gender,count(*) from可以理解为统计性别数量
select后的gender就是group by后的gender
2.先查询 入职日期 在 '2015-01-01'(包含) 以前的员工 , 并对结果根据 职位 分组 , 获取员工数量大于等于2的职位:
/*入职日期 在 '2015-01-01'(包含) 以前 为条件;职位 分组 要用到group by*/
/*获取员工数量大于等于2的职位-->员工数量只有一个人的职位要过滤掉-->还需要cout函数进行过滤筛选-->属于分组之后的过滤
注:where后不能用count聚合函数*/
select job,count(*) from tb_employee where entrydate <= '2015-01-01' group by job having count(*)>=2;
三.where和having的区别:
a.执行时机不同:
where是分组之前进行过滤,不满足where条件则不参与分组;
having是分组之后对结果进行过滤。
b.判断条件不同:
where*不能对聚合函数进行判断,但having可以*。
四.注意事项:
-
分组之后,查询的字段一般为 聚合函数 和 分组字段,查询其他字段无任何意义。
-
执行顺序: where > 聚合函数 > having