oracle菜鸟日记2

本文深入探讨了SQL中的聚合函数(如AVG、COUNT、MIN、MAX)及开窗函数(如SUM OVER、PARTITION BY)的使用方法与特性。包括如何正确设置开窗函数的partition by参数,理解不同函数对NULL值的处理方式,以及如何通过CASE WHEN语句灵活处理特定需求。同时,介绍了median函数的作用和count函数参数的应用。
1. select empno,ename,deptno,job,sum(sal) over (partition by job order by sal) jobsal,sum(sal) over (partition by deptno order by sal) deptnosal
from emp
order by deptno;
对于多个开窗函数里面的partition by若前后不一致也不影响。只要想想一般的函数怎样编程开窗函数就行了,
那一个的partition by 先写在前面,就先以那个partition by先分区,且,分区列里面的值不一定都是相连的,
要先看先以哪一个分区的,然后再这个分区的基础上再进行分区,所以后面的分区列里面的值不一定是相连的。。


2. AVG函数会忽略列里面的null值(一定要注意这一点,如果,null值没有被算入那么平均值不变,若null用0代替那么总个数变了,AVG的最后的值也会发生变化)


3. group by 后面的列可以不出现在select语句后面,但没有出现在group by后面的列一定不能出现在select后面!!


4. min和max函数会忽略null值,但是允许包含null值,主列中的列也允许有null值


5. 对于count()函数,如果参数是列名,那么列里面的null,会被忽略,而以*为参数的话则null不会被忽略


6. 开窗函数sum over非常容易成才累计和,解决的方法就是在order by子句后不仅要包括sal,还要包含empno(主键),使得表的排序是唯一的,以避免累计列中出现重复值


7. 累计乘(实际就是累计加演变而来的)exp(sum(ln(sal))over(order by sal,empno)) as running_man


8. select case when empno=7369 then sal else 0 end as empno
 from emp;


 EMPNO
------
   800
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0


择14行。
对于case when 语句,当when后面的条件满足的时候,执行then,当不满足的时候会返回null,也就是说case when他会扫描全表
因为max或min函数可以忽略null,所以我们可以在case when外面加上这两个函数其中的任何一个就可以返回我们想要的数,把null值忽略


9. median()函数,求中间值函数


10. 对于sum() over开窗函数,对于有partition by的,计算的结果并不是累加,因为他一次计算的值是一个窗口里面的全部值,而对于没有partition by的,计算的结果
是累加和,因为它是一行一行出现往后面移动的!!!


11. 对于 select hiredate from emp where ename=‘SMITH’我们可以通过case 子句来简化它,select max(case when ename=‘SMITH’ then hiredate) from emp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值