oracle 分析函数视频教程,Oracle 分析函数使用教程(3)
開窗條件query_partition_clause決定被除數的值, 如果用戶忽略了這個條件, 則計算查詢結果中所有記錄的匯總值.
用戶不能使用其他分析函數或者ratio_to_report作為分析函數ratio_to_report的參數expr, 也就是說這個函數不能循環使用. 但我們可以使用其他普通函數作為這個分析函數的查詢結果.
RATIO_TO_REPORT解析函數使得這種類型的查詢更容易編碼。它的格式如下:
RATIO_TO_REPORT (expr) OVER (query_partition_clause)
/* FORMATTED ON 2009/11/10 20:24 (FORMATTER PLUS V4.8.8) */
SELECT ENAME, SAL, DEPTNO, RATIO_TO_REPORT (SAL) OVER () AS RR
FROM SCOTT.EMP
WHERE DEPTNO = 10;
ENAME
SAL
DEPTNO
RR
CLARK
2,450
10
0.28
KING
5,000
10
0.571428571428571
MILLER
1,300
10
0.148571428571429
/* FORMATTED ON 2009/11/10 20:36 (FORMATTER PLUS V4.8.8) */
SELECT ENAME, SAL, DEPTNO,
RATIO_TO_REPORT (SAL) OVER (PARTITION BY DEPTNO) AREA_PCT
FROM SCOTT.EMP;
ENAME
SAL
DEPTNO
AREA_PCT
CLARK
2,450.0000000000
10
0.2800000000
KING
5,000.0000000000
10
0.5714285714
MILLER
1,300.0000000000
10
0.1485714286
JONES
2,975.0000000000
20
0.2735632184
FORD
3,000.0000000000
20
0.2758620690
ADAMS
1,100.0000000000
20
0.1011494253
SMITH
800.0000000000
20
0.0735632184
SCOTT
3,000.0000000000
20
0.2758620690
WARD
1,250.0000000000
30
0.1329787234
TURNER
1,500.0000000000
30
0.1595744681
ALLEN
1,600.0000000000
30
0.1702127660
JAMES
950.0000000000
30
0.1010638298
BLAKE
2,850.0000000000
30
0.3031914894
MARTIN
1,250.0000000000
30
0.1329787234
八. First,Last,First_value,Last_value取基數的分析函數
First功能描述:從DENSE_RANK返回的集合中取出排在最前面的一個值的行(可能多行,因為值可能相等),因此完整的語法需要在開始處加上一個集合函數以從中取出記錄。
Last功能描述:從DENSE_RANK返回的集合中取出排在最后面的一個值的行(可能多行,因為值可能相等),因此完整的語法需要在開始處加上一個集合函數以從中取出記錄。
FIRST_VALUE、LAST_VALUE:返回結果集中排在第一位和最后一位的值。
語法是:FIRST_VALUE (expr) OVER ( analytic_clause)
/* FORMATTED ON 2009/11/10 20:51 (FORMATTER PLUS V4.8.8) */
SELECT ENAME, DEPTNO, SAL,
MIN (SAL)KEEP (DENSE_RANK FIRST ORDER BY DEPTNO) OVER (PARTITION BY DEPTNO) "Worst",
MAX (SAL)KEEP (DENSE_RANK LAST ORDER BY DEPTNO) OVER (PARTITION BY DEPTNO) "Best"
FROM SCOTT.EMP;
ENAME
DEPTNO
SAL
Worst
Best
CLARK
10
2,450
1,300
5,000
KING
10
5,000
1,300
5,000
MILLER
10
1,300
1,300
5,000
JONES
20
2,975
800
3,000
FORD
20
3,000
800
3,000
ADAMS
20
1,100
800
3,000
SMITH
20
800
800
3,000
SCOTT
20
3,000
800
3,000
WARD
30
1,250
950
2,850
TURNER
30
1,500
950
2,850
ALLEN
30
1,600
950
2,850
JAMES
30
950
950
2,850
BLAKE
30
2,850
950
2,850
MARTIN
30
1,250
950
2,850
/* Formatted on 2009/11/10 20:55 (Formatter Plus v4.8.8) */
SELECT ENAME, DEPTNO, SAL,
FIRST_VALUE (ENAME) OVER (PARTITION BY DEPTNO ORDER BY SAL ASC) AS LOWEST_SAL
FROM SCOTT.EMP;
ENAME
DEPTNO
SAL
LOWEST_SAL
MILLER
10
1,300
MILLER
CLARK
10
2,450
MILLER
KING
10
5,000
MILLER
SMITH
20
800
SMITH
ADAMS
20
1,100
SMITH
JONES
20
2,975
SMITH
FORD
20
3,000
SMITH
SCOTT
20
3,000
SMITH
JAMES
30
950
JAMES
MARTIN
30
1,250
JAMES
WARD
30
1,250
JAMES
TURNER
30
1,500
JAMES
ALLEN
30
1,600
JAMES
BLAKE
30
2,850
JAMES
九. Greatest, Least 函數
Greatest函數:取一個一維數組中的最大值。
Least函數:取一個一維數組中的最小值。
/* Formatted on 2009/11/10 20:59 (Formatter Plus v4.8.8) */
SELECT GREATEST (1, 2, 3, 4, 5, 6) MAX
FROM DUAL;
/* Formatted on 2009/11/10 20:59 (Formatter Plus v4.8.8) */
SELECT LEAST (1, 2, 3, 4, 5, 6) MIN
FROM DUAL;
十. Trunc, round, decode,substr函數
全角的數字/字母/標點符號轉半角to_single_byte
10.1 Trunc 函數
Trunc實際上是truncate函數,字面意思是截斷,截尾。函數的功能是將數字進行截斷。tranc()并不四舍五入。
/* Formatted on 2009/11/10 21:19 (Formatter Plus v4.8.8) */
SELECT TRUNC (1234.5678, 2) rs
FROM DUAL;
RS
----------
1234.56
/* Formatted on 2009/11/10 21:19 (Formatter Plus v4.8.8) */
SELECT TRUNC (1234.5678, 0) rs
FROM DUAL;
RS
----------
1234
/* Formatted on 2009/11/10 21:19 (Formatter Plus v4.8.8) */
SELECT TRUNC (1234.5678, -2) rs
FROM DUAL;
RS
------------
1200
10.2 Round 函數
Round 函數: 返回按指定位數進行四舍五入的數值。
語法: Round(expression[, numdecimalplaces])
expression 必選。 數值表達式 被四舍五入。
numdecimalplaces 可選。數字表明小數點右邊有多少位進行四舍五入。如果省略,則 Round 函數返回整數。
/* Formatted on 2009/11/10 21:23 (Formatter Plus v4.8.8) */
SELECT ROUND (12.45, 1) rs
FROM DUAL;
RS
---------------
12.5
10.3 Decode 函數
decode(條件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
decode(字段或字段的運算,值1,值2,值3)
SELECT DECODE (value, , ) FROM table
這個函數運行的結果是,當字段或字段的運算的值等于值1時,該函數返回值2,否則返回值3
當然值1,值2,值3也可以是表達式,這個函數使得某些sql語句簡單了許多
/* Formatted on 2009/11/10 21:28 (Formatter Plus v4.8.8) */
SELECT DECODE (NAME, 'Dave', 'I Love BL', 'NoLove') rs
FROM (SELECT 'Dave' NAME
FROM DUAL);
RS
---------
I Love BL
/* Formatted on 2009/11/10 21:29 (Formatter Plus v4.8.8) */
SELECT DECODE (NAME, 'BL', 'I love Dave', 'NoLove') rs
FROM (SELECT 'Dave' NAME
FROM DUAL);
RS
------
NoLove
10.4 SubStr 函數
SUBSTR(string,start,count) : 取子字符串,從start開始,取count個。
/* Formatted on 2009/11/10 21:37 (Formatter Plus v4.8.8) */
SELECT SUBSTR ('I Love You', 3, 4) rs
FROM DUAL;
RS
----
Love
總結
以上是生活随笔為你收集整理的oracle 分析函数视频教程,Oracle 分析函数使用教程(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优惠卷测试案例
- 下一篇: 计算机考试打印测试页,通过电脑打印测试页