引用
在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
SELECT SUM(population) FROM bbc
引用
这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。
通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。
HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合后对组记录进行筛选。
让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句,还采用第三节介绍的bbc表。
SQL实例:
一、显示每个地区的总人口数和总面积:
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
引用
先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。
二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000
引用
在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。
相反,HAVING子句可以让我们筛选成组后的各组数据.
分享到:
相关推荐
02.hive查询语法--分组聚合--groupby查询--where过滤和having过滤的区别.mp4
给大家详细的介绍了SQL中Having与Where的区别,以及这两者的注意事项,文中还分享了Having与Where的示例代码,相信对大家的理解和学习很有帮助,感兴趣的朋友们可以参考借鉴,有需要的朋友们可以一起学习学习。
“Having”是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用“聚合函数”。 2.使用的角度: where后面之所以不能使用聚合函数是因为where的执行顺序...
“Having”是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。 聚合函数,SQL基本函数,聚合函数对一组值执行计算,并返回单个值。除了 COUNT 以外,聚合函数都会...
where不能使用聚合函数、having中可以使用聚合函数 where是一个约束声明,使用where来约束来自数据库的数据;where是在结果返回之前起作用的;where中不能使用聚合函数。 having是一个过滤声明;在查询返回结果集以后,...
正确区分元组过滤条件(WHERE 子句)和分组过滤条件(HAVING 短语)的异同 掌握 Order by 的使用 掌握使用 DISTINCT 实现查询结果的去重方法 掌握空值 NULL 的使用方法 掌握表别名的使用场合及...
Mysql 与聚合函数在一起时候where条件和having条件的过滤时机 where 在聚合之前过滤 当一个查询包含了聚合函数及where条件,像这样的情况 select max(cid) from t where t.id<999>=5 先分组,再聚合,然后过滤聚合...
如果在GROUP BY中过滤数据,在WHERE从句中指定条件比在HAVING从句中有更好的性能,因为在GROUP之前已经过滤掉数据,因此更少的行被汇总 3.UNION会对两个SELECT语句的结果集执行一个SORT,并消除重复行,成本会...
掌握WHERE子句的用法,以便根据条件过滤查询结果。 学习使用ORDER BY子句对查询结果进行排序。 了解GROUP BY和HAVING子句的用法,用于对查询结果进行分组和过滤。 三、数据操作 学习如何使用INSERT INTO语句向...
--having 分组过滤条件 按照年龄分组,过滤年龄为空的数据,并且统计分组的条数和现实年龄信息 select count(*), age from student group by age having age is not null; 按照年龄和cid组合分组,过滤条件是cid...
以提高查询速度3:使用 where 而不是 having ,where是用于过滤行的,而having是用来过滤组的,因为行被分组后,having 才能过滤组,所以尽量用户 WHERE 过滤4:使用 exists 而不用 IN 因为 Exists 只检查行的存在,...
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。 having 子句被限制子已经在SELECT语句中定义的列和聚合...
使用HAVING子句对分组后的数据进行过滤 第六章 子查询 第七章 数据建模及数据库设计 了解系统开发的步骤 数据关系的定义 理解实体关系映射图(E-R图) 第八章 创建表 掌握创建表的语法 Oracle的数据类型 使用约束...
1. SQL书写规范: (规范书写相关SQL语句:SELECT、...WHERE <过滤条件列表> GROUP BY <分组列表> HAVING <条件表达式> ORDER BY <排序列表> <连接词> SELECT <查询列表> FROM <查找表列表> WHERE <过滤条件列表> •
where条件之比较运算、逻辑运算 模糊查询(like) % 表示任意多个字符 _ 表示一个任意字符 范围查询(between and 、in) in 非连续的范围查询 between 起始 and 终值 连续范围的查询(包括起始和终值) 控制...
对于Where条件的顺序,过滤到最大查询记录数量的条件必须写在Where条件的结尾处。 Where条件中涉及到使用复杂函数判定的必须注意要写到Where条件的最前面 3.索引方面 记录数少的表保留有主键索引就可以了,...
2、where只能操作表中字段,having过滤由聚合函数生成的显示列 3、distinct 1、distinct和from之间所有的字段全部相同才会去重 2、select count(distinct name) from sanguo; 2、索引(BTREE) 1、优点 :加快数据...
NOT 与 IN 在一起使用时,NOT 是找出与条件列表不匹配的行。 IN 列表里有 NULL 时不处理,不影响结果;用 NOT IN 时,有 NULL 则出错,必须排除空值再运算。 in :选择列表的条件 使用IN操作符的优点: 在长的...
WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二、关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 from where group by having select disti
数据定义语言 (DDL) CREATE TABLE:创建表 ALTER TABLE:修改表结构 ...HAVING:对分组结果进行过滤 DISTINCT:返回唯一值 数据控制语言 (DCL) GRANT:授予权限 REVOKE:撤销权限 其他常用语句-详情见文档