组函数的使用小结

1、常用的组函数:

avg(expr):表示计算表达式的平均值;

sum(expr):表示计算表达式的总和;

max(expr):表示计算表达式的最大值:

min(expr):表示计算表达式的最小值;

count(*|expr):表示计算表中数据的总数;

实验一下:

SQL> select * from emp;
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

14 rows selected;

avg函数:

SQL> select avg(sal),avg(comm) from emp;

  AVG(SAL)  AVG(COMM)
---------- ----------
2073.21429        550

avg(comm)函数中计算的是四个值的平均值也就是说是计算的是确定值的平均值。要想计算全部数据的平均值,要用到nvl函数:

SQL> select avg(sal),avg(nvl(comm,0)) from emp;

  AVG(SAL) AVG(NVL(COMM,0))
---------- ----------------
2073.21429       157.142857
计算员工的总数:

SQL> select count(empno),count(*) from emp;

COUNT(EMPNO)   COUNT(*)
------------ ----------
          14         14

说明sql语言的编译顺序(from->where->group by->having->select->order by)

1、select之后,from之前出现的字段,要么被用于组函数,要么被用于group by之后(被用于group by 之后 的也可以没有出现在select之后)

2、group  by 要用在where之后

3、group  by 中不能用列别名

where句对分组前的数据筛选而having则对分组后的子句筛选(where子句中不能用组函数,having子句中可以用组函数)

SQL> select deptno,sum(sal),count(*),avg(sal)
  2  from emp
  3  where avg(sal)<2500
  4  having avg(sal)<2500
  5  order by deptno;
where avg(sal)<2500
      *
ERROR at line 3:
ORA-00934: group function is not allowed here
出错的原因如上。

函数的嵌套:

求平均工资最大的部门名字

SQL> select dname
  2  from dept
  3  where deptno = ( select deptno
  4  from emp
  5   having avg(sal) =(select max(avg_sal) from (select avg(sal) avg_sal from emp
  6  group by deptno))
  7   group by deptno);

DNAME
--------------
ACCOUNTING

其中要用到多个函数嵌套。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值