关系型数据库基础之:聚合函数与分组

2014-11-24 15:34:35 · 作者: · 浏览: 0
关系型 数据库基础之:聚合函数与分组
关系型数据库基础之:简单的数据查询
http://www.2cto.com/database/201304/202051. html
6、聚合函数与分组:
使用聚合函数进行统计总汇:
count:计算行数
sum:计算总和
avg:计算平均值
max:计算最大值
min:计算最小值
聚合函数的基本语法基本类似。除count(*)以外处理单个列中全部所选的值以生成单个结果值。聚合函数可以应用于表中的所有行、where子句指定的表的子集或表中一组或多组行。应用聚合函数后每行都将生成一个值。
*计数所有选择的行,包括null值
all计数指定列的所有的非空值行
distinct计数指定列的所有唯一非空值行
其中all是默认的可以不写。
执行行和列的计数count:
select count(计数规范) from 表名;
select count(计数规范)as 重命列名 from 表名;
返回列合计值sum:
计和只能用于数字列的计算,不能用于字符串。
select sum(计数规范) from 表名;
sum函数和count函数唯一不同点在于sum函数不能使用星号*通配符,而其他的用法基本一致,我们同样可以以同样的方式指定all值或者distinct选项来选择所有值或者只是唯一值。
select sum(distinct pk_id) from t_student;去掉重复的pk_id后求和。
获取列平均值avg:
select avg(计数规范) from 表名;
除的时候只要以列计算空值列不算,重复的也不排除,如果需要排除那么可以加distinct。
sum和avg都只能用于数值。
返回最大值和最小值max、min:
是通用型可以用于数字、字符串、日期等。但是空值不计算。
select max(计数规范) from 表名;计算最小值
select min(计数规范) from 表名;计算最大值
数据分组:
过滤分组数据group by:
group by子句用来对数据分组,group by前面必须要有聚合函数。
select 列A,聚合函数(聚合函数规范)from 表名 where 过滤条件 group by 列A;
使用having子句:
having是过滤聚合函数计算的值。
having后面必须跟随聚合函数,不是聚合函数只能用where。
having子句放在group by之后,其形式为:having 过滤条件。
有having一定要有group by,但是有group by不一定要有having。
我们想同时再聚合函数计算之前和之后过滤,可以使用having与where协作完成。
where过滤条件在聚合函数计算之前起作用,聚合函数之后having子句将返回行的限制。
sql语句的执行顺序:
书写顺序:
select返回某些数据
from表名
where过滤
group by对数据进行分组
having过滤
order by排序
执行顺序:
from
where
group by
select
having
order by