我个人的理解如下:
group by,having已经where这三个子句的执行顺序是有区别的:
先执行where子句,对符合条件的数据进行删选
然后执行group by子句,对删选出来的结果集进行分组
最后执行having子句,对分组后的结果集再次进行筛选。
这样就很好理解为什么带有聚合函数 (sum,min,max,avg,count)的查询条件只能使用在having子句,而不能在where子句中,因为它违背了执行顺序。
必须在分组以后,计算出结果集,然后才能对相应的结果集进行进一步的筛选。
在oracle中,group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。
但是在mysql中,是没有这样的限制的。
group by,having已经where这三个子句的执行顺序是有区别的:
先执行where子句,对符合条件的数据进行删选
然后执行group by子句,对删选出来的结果集进行分组
最后执行having子句,对分组后的结果集再次进行筛选。
这样就很好理解为什么带有聚合函数 (sum,min,max,avg,count)的查询条件只能使用在having子句,而不能在where子句中,因为它违背了执行顺序。
必须在分组以后,计算出结果集,然后才能对相应的结果集进行进一步的筛选。
在oracle中,group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。
但是在mysql中,是没有这样的限制的。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28497416/viewspace-2128716/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28497416/viewspace-2128716/