1:
因为where关键字无法与合计函数一起使用,例如sum(),avg()等,所以当有条件的话,需要放在having
2:
sql中的having语句是在使用group by的时候使用的。通常where语句是在group by之前做数据筛选的,而having语句是对 group by之后的结果进行筛选的。
例如:
从商品销售表里取得用户A购买的各种商品的总数:
SELECT SUM(TOTAL) FROM COST WHERE USERID = 'A' GROUP BY PRODUCTID
从商品销售表里取得用户A购买的各种商品的总数,并且改总数大于10:
SELECT SUM(TOTAL) FROM COST WHERE USERID = 'A' GROUP BY PRODUCTID HAVING SUM(TOTAL) > 10
having与where最大的区别是having 能带聚合函数,而where不可以
select emp_id from t group by emp_id having count(*) = 1 --正确
select emp_id from t group by emp_id where count(*) = 1 --错误
如果用where要达到这个,估计这样
select t1.emp_id from (select emp_id,count(*) as cnt from t group by emp_id)t1 where t1.cnt=1