组函数
报表统计
经常需要对表中的数据进行分类统计
统计它们的平均值、最大值、最小值等
Oracle提供了这样的函数
组函数
组函数操作在一组行(记录)上,每组返回一个结果
AVG(DISTINCT|ALL|n) 结果集中列的平均值
SUM(distinct|all|n) 结果集中列的求和值
count(distinct|all|expr|*) 结果集中记录的总数
max(distinct|all|expr) 结果集中列的最大值
min(distinct|all|expr) 结果集中列的最小值
组函数 : 例子
AVG和SUM只能针对NUMBER类型
COUNT和MAX和MIN可以针对任何类型
例如:
select AVG(column1),SUM(colnum2) from tabname;
select count(colany),max(colany),min(colany) from tabname;
缺省情况组函数处理所有的非空值
当组函数要处理的所有值都为null,count函数返回0,其它函数返回null 。
select conut(colnull),AVG(colnull) from tabname;
select count(colnull),AVG(colnull) from tabname where colnull is null;
项目案例:
单位费用的总和,平均值,最大值,最小值,个数
组函数 : 例子
去掉重复值后统计
select count(distinct colname) from tabname;
去重后计数
多少台unix服务器对外提供远程登录业务?
select count(distinct unix_host) from service;
group by 及 having 子句
group by 子句的应用场景
问题
-- 每台unix服务器上开通的os账号数即开户数
核心点
-- 将service表中的记录根据unix_host进行分组之后才能统计数量
解决方法
-- 使用group by 子句
group by 子句: 语法
group by 子句的语法及在select 语句中的位置
select colname,group_function from tabname where condition group by
group_by_expression order by column;
项目案例
每台unix服务器上开通的os账号数即开户数
有GROUP BY 子句的select语句的执行过程
根据 group by 子句指定的表达式,将要处理的数据(若有having子句即为通过条件过滤后的数据) 分成若干组,每组由唯一的组标识,组内有若干条记录,根据select后面的组函数对每组的记录进行计算,每组对应一个返回值。