组函数又被称为多行函数
和单行函数不同,组函数将把多行值当做一个整体进行处理
使用组函数的规则:
distinct使得函数只考虑不重复的值;all使得函数考虑每个值,包括重复值。默认情况下是all值,因此无须指定。
用于组函数的参数的数据类型可以是:char、varchar2、number、date
所有组函数忽略空值。为了用一个值代替空值,用nvl、nvl2、coalesce函数。
组函数的使用
使用avg、sum、max、min
avg用于求取记录集中的平均值
SQL> select * from jocky;
EMPLOYEE_ID NAME SALARY
----------- ---------- ----------
1 jocky 10000
2 smith 8000
3 mike 6500
4 blues 5000
5 john 7500
SQL> select avg(salary) from jocky;
AVG(SALARY)
-----------
7400
sum用于取指定列所在分组序列的值的和并返回结果
SQL> select sum(salary) from jocky;
SUM(SALARY)
-----------
37000
而max,min则是用来找出最大、最小值
SQL> select max(salary) from jocky; SQL> select min(salary) from jocky;
MAX(SALARY) MIN(SALARY)
----------- -----------
10000 5000
使用count
count用于返回查询涉及到的记录的行数,count函数有三种格式:
count(*)
count(expr)
count(distinct expr)
count(*)用来返回表中满足select语句标准的所有行数,包括重复行和有空值列的行
count(expr)用来返回在列中的由expr指定的非空值的行的总数
count(distinct expr)用来返回在列中由expr指定的非空值的行以及不相同的行的总数
SQL> select count(*) from jocky;
COUNT(*)
----------
5
SQL> select name,count(*) from jocky group by name;
NAME COUNT(*)
---------- ----------
blues 1
john 1
jocky 1
mike 1
smith 1
SQL> select * from jocky;
EMPLOYEE_ID NAME SALARY
----------- ---------- ----------
1 jocky 10000
2 mike 8500
3 smith 6000
4 blues 5000
5 john 7500
6 jocky 9000
7 tom 10000
SQL> select salary,count(*) from jocky group by salary;
SALARY COUNT(*)
---------- ----------
5000 1
9000 1
10000 2
8500 1
7500 1
6000 1
SQL> select count(distinct salary) from jocky;
COUNT(DISTINCTSALARY)
---------------------
6
组函数与空值
We都知道所有组函数忽略列中的空值。而nvl函数则强制组函数包括空值。如:
SQL> select * from jocky;
EMPLOYEE_ID NAME SALARY
----------- ---------- ----------
1 jocky 10000
2 smith 8000
3 mike 5000
4 blues 5500
5 john 7000
6 tom 6500
7 scott
SQL> select avg(salary) from jocky;
AVG(SALARY)
-----------
7000
SQL> select avg(nvl(salary,0)) from jocky;
AVG(NVL(SALARY,0))
------------------
6000
group by子句
所有组函数是将表作为一个大的信息组进行处理,有时,你需要将表的信息划分为较小的组,可以用group by子句实现。你可以用group by子句把表中的行划分为组。然后你可以用组函数返回每一组的摘要信息。
在group by子句中必须包含列
在group by子句中你不能使用列别名
当使用group by子句时,确保在select列表中的所有没有包括在组函数中的列必须在group by子句中。
having子句
having子句用来约束分组结果,使用having子句指定哪个组将被显示。如:
select department_id,max(salary)
from employees
group by department_id
having max(salary) > 10000
order by sum(salary);
嵌套组函数
如:
select max(avg(salary)) from employees group by department_id;
阅读(1641) | 评论(0) | 转发(0) |