oracle group表达式,Oracle函数-组函数

2d1cbbe71df7aa7edcf1e92949130cd4.png

函数的分类

单行函数:一个input对应一个output,input和output存在一一对应的关系 如lower

组函数:多个input,但是只对应一个output。如 sum()

------------------------------------------------------------------------------------

1、组函数(多行函数)默认情况下组函数

SQL>select min(sal),max(sal),sum(sal),avg(sal) from emp where empno=10;

2、max min :统计日期数字和字符串

SQL>select min(hiredate),max(hiredate) from emp;

SQL>select min(ename),max(ename) from emp;

3、count:用于结果集进行一个计数

①count(*):统计结果集为空的行

SQL>select count(*) from emp;

②count(xxx):不统计结果集为空的行(只统计满足表达式的非空行)

SQL>select count(comm) from emp where deptno=30;

SQL>select count(comm) from emp;

③count(distinct xxx):distinct-剔除重复的行

SQL>select count(distinct deptno) from emp;

4、avg(xxx)求平均值

SQL>select avg(sal) from emp;

SQL>select avg(comm) from emp;

SQL>select avg(nvl(comm,0)) from emp; 统计所有人的平均奖金

5、group by:分组

①单列分组

SQL>select avg(sal) from emp group by deptno;

结果集没意义:需要在前面加上列名

SQL>select deptno,avg(sal) from emp group by deptno;

SQL>select deptno,ename,avg(sal) from emp group by deptno;

②多列分组

先对部门分组,在对相同部门下的相同工作进行分组,在求平均值?

SQL>select deptno,job,avg(sal) from emp group by deptno,job;

错误示例:

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

6、having:过滤

①分组之后还是想进行过滤,想要求出部门平均工资大于xxx的

SQL>select deptno,avg(sal) from emp group by deptno;

DEPTNO   AVG(SAL)

---------- ----------

30 1566.66667

20       2175

10 2916.66667

7、条件表达式

①case

select ename,job,

case

when deptno=10 then sal

when deptno=20 then 2*sal

when deptno=30 then 3*sal

else sal/2

end new_sal

from emp;

②decode

select ename,job,decode(deptno,20,2*sal) from emp;

select ename,job,decode(deptno,20,2*sal,sal) from emp;

select ename,job,decode(deptno,10,sal,20,2*sal,30,3*sal,sal/2) from emp;

③只显示10号部门的工资,不是10号部门的用0表示

SQL>select case when deptno=10 then sal else 0 endfrom emp;

SQL>select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值