首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

ON、WHERE、HAVING的差别

HAVING和WHERE HAVING和WHERE的差别也是与限制条件起作用时机有关,HAVING是在聚集函数计算结果出来之后筛选结果,查询结果仅仅返回符合条件的分组,HAVING不能单独出现...在使用和功能上,HAVING和WHERE有下面差别: 1) HAVING不能单独出现,仅仅能出如今GROUP BY子句之中;WHERE即能够和SELECT等其它子句搭配使用,也能够和GROUP BY...子句搭配使用,WHERE的优先级要高于聚合函数高于HAVING。...2) 由于WHERE在聚集函数之前筛选数据,HAVING在计算之后筛选分组,因此WHERE的查询速度要比HAVING的查询速度快。 3....,进行计算分组之后,通过HAVING限制语句筛选分组,返回结果是满足HAVING子句限制的分组。

71830

PostgreSQL HAVING子句

PostgreSQL HAVING子句 正文 了解GROUP BY和HAVING子句的工作原理可以帮助写出更加高效的SQL。这里用一个真实例子来说明这一点。...理解group by和having后,我们可以写一个更简单更加高效的SQL。和WHERE子句过滤原始数据一样,我们也可以使用having从group by结果集中进行过滤。...我们使用coalesce函数将all countries进行转换,在having中使用coalesce,不会删除country名为NULL的行。...此示例基于的实际 sql 有 24 个小查询,union每个查询中结合了两个以上的表。与原始代码的 200 多行相比,重写的 sql 仅 10 行长,并且在几秒钟内运行,而原始查询则需要半个多小时。...原文 https://smallthingssql.com/having-a-less-understood-sql-clause

85330

SQL学习之HAVING过滤分组

唯一的差别是,WHERE过滤行数据,HAVING过滤分组数据。 如下代码: select * from dbo.T_Unit_Equipment ?...现在有一个报表系统,需要展示每个单位,拥有每台设备的数量,这个时候用WHERE很麻烦(前提是数据量比较少的情况下),下面是解决代码: select UnitId,EquipmentName,COUNT(...现在,改变需求,现在需要检索出每家单位拥有的同一种设备大于等于2的记录,下面是解决代码: select UnitId,EquipmentName,COUNT(*) as Equipments from...上面的代码通过UnitId,EquipmentName两个字段进行分组,然后SELECT语句检索出UnitId,EquipmentName,以及Equipments(Equipments在这里是一个计算字段...现在需要检索出每家单位拥有的同一种设备大于等于2的记录,前提是设备必须有维护人员(对应表中的Person列值不能为空),下面是解决代码: select UnitId,EquipmentName,COUNT

1.6K50

数据库中的having语句_sql的having语句

数据库查询语句 HAVING的用法 HAVING语句通常与GROUP BY子句及聚集函数COUNT,AVG,SUM,MAX,MIN语句联合使用,用来过滤由GROUP BY语句返回的记录集,通常跟在GROUP...where子句后边是指定行所对应的条件,并且不能含有聚集函数,而HAVING后边是指定组所对应的条件,可以含有聚合函数。HAVING语句的存在弥补了WHERE关键字不能与聚集函数联合使用的不足。...如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用 HAVING短语指定筛选条件。...SELECT Class SUM(grade) FROM department GROUP BY Class HAVING SUM(grade)> 75 含有HAVING子句的SQL语句执行顺序如下...注: having 子句中的元素必须出现在select列表中。

2K30

on、where、having的区别

on、where、having这三个都可以加条件的子句中 on是最先执行,where次之,having最后。 有时候如果这先后顺序不影响中间结果的话,那最终结果是相同的。...根据上面的分析,可以知道where也应该比having快点的,因为它过滤数据后才进行sum,所以having是最慢的。...但也不是说having没用,因为有时在步骤3还没出来都不知道那个记录才符合要求时,就要用having了。 在两个表联接时才用on的,所以在一个表的时候,就剩下where跟having比较了。...在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果是一样的,只是where可以使用rushmore技术,而having就不能,在速度上后者要慢。...参考链接 系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。

39220
领券