当我们使用SQL进行分组时,可以使用GROUP BY来实现:
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中where和havingsql中where和having区别
sql语言 where和having区别
T-SQL中where子句与having子句的对比分析.pdf
sql 分组,统计等常用的语句 sql 分组,统计等常用的语句 sql 分组,统计等常用的语句
数据库之where与having
golang中规则引擎的一种查询语言类似于SQL中的where部分
详析SQL语言的WHERE子句与HAVING子句.pdf
Sqlch11_2having条件分组查询.sql,Sqlch11_2having条件分组查询.sql Sqlch11_2having条件分组查询.sql,Sqlch11_2having条件分组查询.sql
SQL 语句中 where 条件后 写上 1=1 是什么意思!.doc
通过SQL分组计算。 通过c#分组计算 c#分组计算通过的方法,大家可以参考
SQL 的WHERE条件解析器,在做列表控件时开发。 能够将常用的WHERE条件解析成一个条件树。 可以对条件树进行相关操作后再还源成SQL语句。
--sql中的 where 、group by 和 having 用法解析 --如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术 select DepartmentID as '部门名称',COUNT(*)...
主要给大家介绍了关于SQL中where子句与having子句的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
HAVING是先分组再筛选记录,WHERE在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前;而 HAVING子句在聚合后对组记录进行筛选
举个例子,我有一份管理学生信息的表,这时候我想查一下男生和女生各多少人,男生总分最高是谁等等,我们完全可以通过group by 性别字段进行操作。 具体应用 暂时忽略数据的正确性,先创建一个表,如下: CREATE ...
“Where”是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”; “Having”是一个过滤声明,所谓过滤是在查询数据库的结果返回...
浅析SQL中WHERE EXISTS子查询.pdf
SQL003分组查询练习