用户手册 >> 数据模型 >> SQL查询语法 >> 分组查询

分组查询

顶( )
最后更新日期: 人发表评论 (点击查看)
sql分组、sql、sql语句、sql语法、sql函数、Having、sql公式、group
上面两节我们所介绍的是将满足条件的记录全部查询出来,最终返回的是明细数据表。这样的表数据字段之间可能有附属关系,即数据是分组罗列的,比如下图:
销售员组属于地区,而产品组属于产品类型。若我们查询不需要精确至每个销售员,而只需要查询整个地区的销量或者每类产品的销量,此时我们就可以对明细数据进行分组,这便是分组查询。分组查询会将相同数值的记录合并起来,如图中的地区,但是对于销售员这样每条记录值不同的字段,在进行分组操作的时候该如何处理呢?这就需要使用聚合函数。本章节我们将对聚合函数与分组进行详细的说明。
1. 分组group by
select 字段 from 表 group by 分组字段
如:select 地区 from SALES_BASIC group by 地区
注:分组字段不能使用计算列等没有相同值的表达式,只能指定表中的实际列名,且该列含有相同数据。
2. 聚合函数
如上面的例子,我们是专门查询了地区字段然后进行分组,若我们在查询字段中加入销售员(每组中有多个销售员),并按照地区进行分组,此时就会出现问题。
原因就是销售员字段每条记录都不同,无法进行合并,这个时候就需要对该字段使用聚合函数进行处理。如统计各地区销售员人数,如下:
注:分组查询中查询的表达式或列必须满足以下四个条件之一:
常数
聚合函数,每个分组生成单个值
分组列,每个分组具有相同的值
上述三项组成的表达式
因此聚合函数就是在进行分组查询时对于非分组字段(无法合并的字段)进行处理的函数。聚合函数包括count、avg、max、min和sum。聚合函数是作用于行集的,即是对一组记录进行的汇总。
2.1 count
Count(*):计算满足查询条件的行数
如:select count(*) as 各地区记录数 from SALES_BASIC group by 地区
或者如上一个例子中的count(字段|表达式)。
2.2 sum
Sum(列名|表达式):计算数值列或表达式的累加结果。
如:select 地区,sum(销量) as 地区销量 from SALES_BASIC group by 地区
2.3 avg
Avg(列名|表达式):计算数据列或表达式的算术平均值。
如:select 地区,avg(销量) as 地区平均销量 from SALES_BASIC group by 地区
2.4 max
Max(列名|表达式):找出给定列或表达式中的最大值。
如:select 地区,max(销量) as 地区最大销量 from SALES_BASIC group by 地区
2.5 min
Min(列名|表达式):找出给定列或表达式中的最小值。
如:select 地区,min(销量) as 地区最少销量 from SALES_BASIC group by 地区
注:聚合函数不区分大小写,及sum()与SUM()是等价的。
3. Having子句过滤分组数据
having子句为一个过滤器,就像where子句剔除查询中不需要的行一样,having子句剔除不需要的分组。为什么不直接使用where进行筛选数据呢?原因是在having子句中可以使用聚合函数,但是where子句中不行。如上面的例子,我们查询出各地区的总销量。
若我们希望筛选出总销量大于5000的地区,若用where子句进行过滤,会出现错误。
必须换用having子句,如下:
注:一般having子句总是与group by子句同时出现,但having子句也可单独使用,此时系统认为满足where条件的所有记录是一个分组。
 
 
 
 
   
文明发言,用心评论
 
应用此篇文章,您:
不费力
研究了一会
琢磨了好久
 
查看全部条>>
返回顶部
Copyright©2019 帆软软件有限公司
苏ICP备18065767号-3