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
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