1====分析函数 至关于把分组后的结果加到每一行里oracle
SELECT t.loan_contract_no,t.loan_name,t.loan_amount,ROWNUM,
row_number() over (PARTITION BY t.area_no ORDER BY t.loan_amount DESC),--行号
round(avg(t.loan_amount) over (PARTITION BY t.area_no ORDER BY t.loan_amount DESC)),
round(SUM(t.loan_amount) over (PARTITION BY t.area_no ORDER BY t.loan_amount DESC)),
round(rank() over (PARTITION BY t.area_no ORDER BY t.loan_amount DESC)),--排名不连续
round(dense_rank() over (PARTITION BY t.area_no ORDER BY t.loan_amount DESC)),--排名序号连续
round(MAX(t.loan_amount) over (PARTITION BY t.area_no ORDER BY t.loan_amount DESC)),
round(MIN(t.loan_amount) over (PARTITION BY t.area_no )),--不能加 ORDER BY t.loan_amount DESC
round(first_value(t.loan_amount) over (PARTITION BY t.area_no )),
round(last_value(t.loan_amount) over (PARTITION BY t.area_no )),
lag(t.loan_amount,1,1) over ( ORDER BY t.loan_amount DESC),--最大用1填充
lead(t.loan_amount,1,0) over ( ORDER BY t.loan_amount DESC)--最小用0填充
FROM account_info t WHERE t.grant_loan_date>'2016-04-01';app
select t.*
from scott.emp t ORDER BY t.deptno,t.sal;
SELECT t.deptno,t.ename,t.sal,last_value(t.sal) over (PARTITION BY t.deptno ORDER BY t.sal ROWS BETWEEN 2 preceding AND 2 following ) from scott.emp t;
SELECT t.deptno,t.ename,t.sal,MAX(t.sal) over (PARTITION BY t.deptno ORDER BY t.sal ROWS between unbounded preceding AND unbounded following ) from scott.emp t;
SELECT t.empno,t.deptno,t.ename,t.sal,SUM(t.sal) over (PARTITION BY t.deptno ORDER BY t. ename) from scott.emp t ORDER BY 2,3;
SELECT t.empno,t.deptno,t.ename,t.sal,SUM(t.sal) over (PARTITION BY t.deptno ORDER BY t. ename ROWS BETWEEN unbounded preceding AND CURRENT ROW) from scott.emp t ORDER BY 2,3;函数
一、instrspa
在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,就是说从字符的开始code
到字符的结尾就结束。索引
语法以下:字符串
instr( string1, string2 [, start_position [, nth_appearance ] ] )get
参数分析:string
string1it
源字符串,要在此字符串中查找。
string2
要在string1中查找的字符串.
start_position
表明string1 的哪一个位置开始查找。此参数可选,若是省略默认为1. 字符串索引从1开始。若是此参数为正,从左到右开始检索,若是此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
nth_appearance
表明要查找第几回出现的string2. 此参数可选,若是省略,默认为 1.若是为负数系统会报错。
注意:
若是String2在String1中没有找到,instr函数返回0.
SELECT code , name , dept, occupation FROM staff WHERE code IN ('A10001','A10002');
或者:
SELECT code , name , dept, occupation FROM staff WHERE code = 'A10001' OR code = 'A10002';
或者
SELECT code , name , dept, occupation FROM staff WHERE
instr('A10001,A10002',code)>0;
SELECT code, name, dept, occupation FROM staff WHERE instr(code, '001') > 0;
等同于
SELECT code, name, dept, occupation FROM staff WHERE code LIKE '%001%' ;
//计算年龄
SELECT Extract(year from sysdate)-Extract(year FROM to_date(i.DATE_OF_BIRTH,'yyyy-mm-dd')) FROM crf_p2p_loan_idcard_info i ;