SQL分组中WHERE和HAVING的异同
程序员文章站
2022-05-10 14:18:42
...
当我们使用SQL进行分组时,可以使用GROUP BY来实现:
程序意图很明显:按产品汇总销售额。
当我们需要对分组进行限制时,如剔除掉产品为null的组,可以通过两种方式来实现:
mysql中的执行时间对比:
可以看到使用WHERE时效率更高。
两种方式差异总结如下:
select product_id,sum(amt) from a_fin_factline group by 1
程序意图很明显:按产品汇总销售额。
当我们需要对分组进行限制时,如剔除掉产品为null的组,可以通过两种方式来实现:
select product_id,sum(amt) from a_fin_factline group by 1 having product_id is not null;
select product_id,sum(amt) from a_fin_factline where product_id is not null group by 1;
mysql中的执行时间对比:
select product_id,sum(amt) from a_fin_factline group by 1 having product_id is not null; 受影响的行: 0 时间: 1.086s select product_id,sum(amt) from a_fin_factline where product_id is not null group by 1; 受影响的行: 0 时间: 0.098s
可以看到使用WHERE时效率更高。
两种方式差异总结如下:
- 语法上:WHERE在GROU BY之前,HAVING在之后
- 执行计划:WHERE使得限制发生在分组之前,HAVING是在分组之后
- 效率上:使用WHERE使得目标结果集更小,分组汇总的效率高;使用HAVING时,结果集不变,WHERE效率更高
- 其他:WHERE可以使用表中的任意字段进行限制,而HAVING必须是SELECT后面的字段
上一篇: SQL Server中的MD5实现方法
下一篇: 基于注解的SpringMVC简单介绍