聚合函数,也可以叫做聚组函数、组函数、集合函数,具体包括:count、sum、avg、max、min、stddev、variance。
【特别说明】:使用聚合函数进行统计时,只有count函数会把空值一并统计,除此以外的其他聚合函数都不会对空值进行统计。
为演示聚合(聚组)函数的使用效果,现在创建一张样例表,建表语句如下:
-- Create table
create table STUDENTRECORDTABLE
(
studentid VARCHAR2(50) not null,
classid VARCHAR2(50),
grade NUMBER
)
tablespace TPSTUD
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Add comments to the table
comment on table STUDENTRECORDTABLE
is '学生成绩表(演示)';
-- Add comments to the columns
comment on column STUDENTRECORDTABLE.studentid
is '学生id';
comment on column STUDENTRECORDTABLE.classid
is '班级id';
comment on column STUDENTRECORDTABLE.grade
is '成绩';
-- Create/Recreate primary, unique and foreign key constraints
alter table STUDENTRECORDTABLE
add constraint PK_STUDENTRECORDTABLE primary key (STUDENTID)
using index
tablespace TPSTUD
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
再往表中插入数据,语句如下:
insert into STUDENTRECORDTABLE (studentid, classid, grade)
values ('Stud_01', 'Cla_01', 75);
insert into STUDENTRECORDTABLE (studentid, classid, grade)
values ('Stud_02', 'Cla_01', 80);
insert into STUDENTRECORDTABLE (studentid, classid, grade)
values ('Stud_03', 'Cla_01', 80);
insert into STUDENTRECORDTABLE (studentid, classid, grade)
values ('Stud_04', 'Cla_01', 85);
insert into STUDENTRECORDTABLE (studentid, classid, grade)
values ('Stud_05', 'Cla_02', 90);
insert into STUDENTRECORDTABLE (studentid, classid, grade)
values ('Stud_06', 'Cla_02', 95);
insert into STUDENTRECORDTABLE (studentid, classid, grade)
values ('Stud_07', 'Cla_02', 95);
insert into STUDENTRECORDTABLE (studentid, classid, grade)
values ('Stud_08', 'Cla_02', 100);
commit;
最后查询表中所有数据,结果如下图:
【函数格式】:count( * | value | [ distinct | all ] column )
【参数说明】:
【函数说明】:该函数统计满足条件的所有记录的数量,当省略参数distinct和all时,默认为all。
【样例展示一】:
select count(*) from STUDENTRECORDTABLE; --返回:8
select count(1) from STUDENTRECORDTABLE; --返回:8
select count('aa') from STUDENTRECORDTABLE; --返回:8
select count(grade) from STUDENTRECORDTABLE; --返回:8
select count(all grade) from STUDENTRECORDTABLE; --返回:8
select count(distinct grade) from STUDENTRECORDTABLE; --返回:6
【样例展示二】:与group by函数配合使用
select classid,count(*) from STUDENTRECORDTABLE group by classid
返回结果如下图:
【样例展示三】:与group by函数以及having子句配合使用
select classid,count(*) from STUDENTRECORDTABLE group by classid having count(*)=4
返回结果如下图:
【函数格式】:sum( [ distinct | all ] column )
【参数说明】:
【函数说明】:对所有满足条件的记录的指定字段进行求和,当省略参数distinct和all时,默认为all。
【样例展示一】:
select sum(grade) from STUDENTRECORDTABLE; --返回:700
select sum(all grade) from STUDENTRECORDTABLE; --返回:700
select sum(distinct grade) from STUDENTRECORDTABLE; --返回:525
【样例展示二】:与group by函数配合使用
select classid,sum(grade) from STUDENTRECORDTABLE group by classid
返回结果如下图:
【样例展示三】:与group by函数以及having子句配合使用
select classid,sum(grade) from STUDENTRECORDTABLE group by classid having sum(grade)>350
返回结果如下图:
【函数格式】:avg( [ distinct | all ] column )
【参数说明】:
【函数说明】:对所有满足条件的记录的指定字段求平均值,当省略参数distinct和all时,默认为all。
【样例展示一】:
select avg(grade) from STUDENTRECORDTABLE; --返回:87.5
select avg(all grade) from STUDENTRECORDTABLE; --返回:87.5
select avg(distinct grade) from STUDENTRECORDTABLE; --返回:87.5
【样例展示二】:与group by函数配合使用
select classid,avg(grade) from STUDENTRECORDTABLE group by classid
返回结果如下图:
【样例展示三】:与group by函数以及having子句配合使用
select classid,avg(grade) from STUDENTRECORDTABLE group by classid having avg(grade)>90
返回结果如下图:
【函数格式】:max( [ distinct | all ] column )
【参数说明】:
【函数说明】:对所有满足条件的记录的指定字段求最大值,当省略参数distinct和all时,默认为all。
【样例展示一】:
select max(grade) from STUDENTRECORDTABLE; --返回:100
select max(all grade) from STUDENTRECORDTABLE; --返回:100
select max(distinct grade) from STUDENTRECORDTABLE; --返回:100
select max(studentid) from STUDENTRECORDTABLE; --返回:Stud_08
select max(classid) from STUDENTRECORDTABLE; --返回:Cla_02
【样例展示二】:与group by函数配合使用
select classid,max(grade) from STUDENTRECORDTABLE group by classid
返回结果如下图:
【样例展示三】:与group by函数以及having子句配合使用
select classid,max(grade) from STUDENTRECORDTABLE group by classid having max(grade)>90
返回结果如下图:
【函数格式】:min( [ distinct | all ] column )
【参数说明】:
【函数说明】:对所有满足条件的记录的指定字段求最小值,当省略参数distinct和all时,默认为all。
【样例展示一】:
select min(grade) from STUDENTRECORDTABLE; --返回:75
select min(all grade) from STUDENTRECORDTABLE; --返回:75
select min(distinct grade) from STUDENTRECORDTABLE; --返回:75
select min(studentid) from STUDENTRECORDTABLE; --返回:Stud_01
select min(classid) from STUDENTRECORDTABLE; --返回:Cla_01
【样例展示二】:与group by函数配合使用
select classid,min(grade) from STUDENTRECORDTABLE group by classid
返回结果如下图:
【样例展示三】:与group by函数以及having子句配合使用
select classid,min(grade) from STUDENTRECORDTABLE group by classid having min(grade)<80
返回结果如下图:
【函数格式】:stddev( [ distinct | all ] column )
【参数说明】:
【函数说明】:对所有满足条件的记录的指定字段求标准差,当省略参数distinct和all时,默认为all。
【样例展示一】:
select stddev(grade) from STUDENTRECORDTABLE; --返回:8.86405260427918
select stddev(all grade) from STUDENTRECORDTABLE; --返回:8.86405260427918
select stddev(distinct grade) from STUDENTRECORDTABLE; --返回:9.35414346693485
【样例展示二】:与group by函数配合使用
select classid,stddev(grade) from STUDENTRECORDTABLE group by classid
返回结果如下图:
【样例展示三】:与group by函数以及having子句配合使用
select classid,stddev(grade) from STUDENTRECORDTABLE group by classid having stddev(grade)<5
返回结果如下图:
【函数格式】:variance( [ distinct | all ] column )
【参数说明】:
【函数说明】:对所有满足条件的记录的指定字段求方差,当省略参数distinct和all时,默认为all。
【样例展示一】:
select variance(grade) from STUDENTRECORDTABLE; --返回:78.5714285714286
select variance(all grade) from STUDENTRECORDTABLE; --返回:78.5714285714286
select variance(distinct grade) from STUDENTRECORDTABLE; --返回:87.5
【样例展示二】:与group by函数配合使用
select classid,variance(grade) from STUDENTRECORDTABLE group by classid
返回结果如下图:
【样例展示三】:与group by函数以及having子句配合使用
select classid,variance(grade) from STUDENTRECORDTABLE group by classid having variance(grade)>16
返回结果如下图: