oracle函数
2013-12-07 18:28
495 查看
写篇文章把我新学到的一些oracle函数记下来。。
1. ratio_to_report() 获取列的百分比
如果需要分组,则over(partition by value1,2),按value1分组,保留2位小数。
2. lag() lead() 可以查出同一字段下一个值或上一个值,并作为新的列值
SQL> SELECT * FROM aa;
ID1 VAL
---------- ----------
1 2
1 3
1 10
2 15
2 10
2 6
2 3
3 17
8 rows selected.
根据id1分组,val排序,获取上一行的val值
SQL> SELECT id1,val,LAG(val) OVER(PARTITION BY id1 ORDER BY val) FROM aa;
ID1 VAL LAG(VAL)OVER(PARTITIONBYID1ORDERBYVAL)
---------- ---------- --------------------------------------
1 2
1 3 2
1 10 3
2 3
2 6 3
2 10 6
2 15 10
3 17
8 rows selected.
根据val排序,获取下一行的val值
SQL> SELECT id1,val,LEAD(val) OVER(ORDER BY val) FROM aa;
ID1 VAL LEAD(VAL)OVER(ORDERBYVAL)
---------- ---------- -------------------------
1 2 3
1 3 3
2 3 6
2 6 10
1 10 10
2 10 15
2 15 17
3 17
8 rows selected.
1. ratio_to_report() 获取列的百分比
SQL> SELECT value1,ratio_to_report(value1) OVER() FROM aa; VALUE1 RATIO_TO_REPORT(VALUE1)OVER() ---------- ----------------------------- 1 .047619048 2 .095238095 3 .142857143 4 .19047619 5 .238095238 6 .285714286 6 rows selected.
如果需要分组,则over(partition by value1,2),按value1分组,保留2位小数。
2. lag() lead() 可以查出同一字段下一个值或上一个值,并作为新的列值
SQL> SELECT * FROM aa;
ID1 VAL
---------- ----------
1 2
1 3
1 10
2 15
2 10
2 6
2 3
3 17
8 rows selected.
根据id1分组,val排序,获取上一行的val值
SQL> SELECT id1,val,LAG(val) OVER(PARTITION BY id1 ORDER BY val) FROM aa;
ID1 VAL LAG(VAL)OVER(PARTITIONBYID1ORDERBYVAL)
---------- ---------- --------------------------------------
1 2
1 3 2
1 10 3
2 3
2 6 3
2 10 6
2 15 10
3 17
8 rows selected.
根据val排序,获取下一行的val值
SQL> SELECT id1,val,LEAD(val) OVER(ORDER BY val) FROM aa;
ID1 VAL LEAD(VAL)OVER(ORDERBYVAL)
---------- ---------- -------------------------
1 2 3
1 3 3
2 3 6
2 6 10
1 10 10
2 10 15
2 15 17
3 17
8 rows selected.