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}
_\9B9HhPi v0   显示每个地区的总人口数  和  总面积数
 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:

 

评分:0

我来说两句

Open Toolbar