Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121736
  • 博文数量: 37
  • 博客积分: 2094
  • 博客等级: 大尉
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-14 08:39
文章分类
文章存档

2010年(37)

分类: Oracle

2010-08-25 19:14:25

组函数又被称为多行函数
和单行函数不同,组函数将把多行值当做一个整体进行处理
使用组函数的规则:
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;
阅读(1611) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~