标签:
原文参考:http://www.51ou.com/browse/msyql/43081.html
having是对组进行过滤。where是对行进行过滤。 *** 理解这个至关重要 ***
执行顺序: where > 聚合函数 > having
一个思维误区:
要查找5个部门中工资最高的员工,执行语句(错误):
select id,name,salary from employee group by dept having salary=max(salary);
我的思路是先按照部门进行分组,然后以salary最高作为条件来查找这个员工。
显然这个想法是错误的,用having子句是用来***过滤分组***的,即要留下哪个分组或者排除哪个分组,而不是直接得到某一行结果。
正确的sql语句:
select id,name,salary form employee group by dept order by salary desc;
标签:
原文地址:http://www.cnblogs.com/firstForEver/p/4874199.html