Group_by和having用法
上一篇 /
下一篇 2013-07-05 10:47:26
/ 个人分类:数据库(SQL )
1 .在 介绍 GROUP BY 和 Having 子句之前,我们必须先讲讲 sql语言中的一种特殊的函数:那就是 聚合函数 ,聚合函数指 sum、 count、max、min、avg 等等。
K:x#K2Z o9r0这些函数 和 其他的函数 的根本区别就是它们一般作用在多条记录上。
select sum(population) from bbc 这里的sum 作用在所有返回记录的population 字段上,结果就是该查询只返回一个结果,即 所有国家的总人口数。
2. Group by 被应用于想要分组显示数据的时候。 比如有这样一张表。
name work
张三 扫地
张三 做饭
李四 洗衣服
你的目标是查看两个人一共做了几件事情,请注意你的目的是看他们一共做了几种事情,那么sql 语句就是:
select name ,count(*)
from tabname
group by name
解释:(1)显示字段当中 必须有聚合函数
(2) group by 后面的字段 必须在 select后边出现
(3)select 字段后的非聚合函数字段 必须出现在 group by子句中
3,SQL 实例 {A}
_\9B9Hh Piv0 显示每个地区的总人口数 和 总面积数
seltct regoin ,sum(population),sum(srea)
from bbc
group by regoin
T7W)@-l$\3N6w3h0 解释: 先以 regoin 为单位把返回的记录分为多个组,这就是 group by的意义所在了, 分完组后 再用 聚合函数 对每一组中的不同字段的(一条或是多条)记录 再做运算。
SQl实例 {B}
在以上的查询基础上,做进一步的筛选 ,只显示面积大于1000的地区。
select regoin,sum(population),sum(srea)
from bbc
group by regoin
having sum(srea)>1000
解释: 我们这里不能同where 来筛选大于1000的地区,因为表中不存在这么一条记录,相反having语句可以让我筛选分组以后的各组数据。
4. 通过使用group by 语句 可以让 sum 和 count 这类函数对属于同一组的数据起作用,当指定 group by regoin 时,属于同一regoin(地区)的一组数据只能返回一个值,也就是说 表中除 regoin 之外的字段 只能通过 sum等聚合函数进行运算之后返回一个值。
5. having子句可以让我们筛选 分组后的,以组为单位的组数据, where子句是在分组 和 聚合前筛选原表数据,也就是作用在 group by 和 having之前。而having是在聚合后对组记录进行筛选。
收藏
举报
TAG: