select emp_no,count(emp_no) t from salaries
 group by emp_no
 having t>15;

where 和having 用法:
1、where、聚合函数、having在from后面的执行顺序:where>聚合函数(sum,min,max,avg,count)>having
2、若引入聚合函数来对group by结果进行过滤,则只能用having
3、having语句通常与group by语句联合使用,用来过滤由group by语句返回的记录集。
4、having语句的存在弥补了where关键字不能与聚合函数联合使用的不足
5、where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
6、having子句的作用筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。

举例:查询平均分高于80份的学生记录?
SELECT id,COUNT(course ) numcourse,AVG(score) avgscore
FROM student
GROUP BY id
HAVING avgscore >=80;
在这里,如果用where代替having就会报错,因为where执行顺序大于聚合函数

1、where和having都可以使用的场景
select good_price,goods_name from goods
where goods_price >100;
select good_price,goods_name from goods
having goods_price >100;
注意:having用的前提是已经筛选出goods_price字段,这样就和where效果一样;但如果没有select goods_price就会报错,因为having是从前筛选的字段再筛选,而where是从数据表中的字段直接进行的筛选。

2、只可以用where,不可以使用having的情况
select good_number,,goods_name from goods
where goods_price >100;

3、只可以用having,不可以使用where的情况
select goods_id,avg(goods_price) ag from goods
group by goods_id
having ag>100;

select goods_id,avg(goods_price) ag from goods
where ag>100
group by goods_id;  //会报错,因为goods表中没有字段ag,如果把ag换成avg(goods_price)也会报错,因为表里没有该字段。