oracle易忘函数用法(6)
LEAST()
exp_list是一列表達式,返回其中最小的表達式,每個表達式都被隱含的轉換第一個表達式的數據類型,如果第一個表達式是字符串數據類型中的任何一個,將返回的結果是varchar2數據類型,同時使用的比較是非填充空格類型的比較。
UID
該函數沒有參數,返回唯一標示當前數據庫用戶的整數。
USER
返回當前用戶的用戶名
USERENV()
基于opt返回包含當前會話信息。opt的可選值為:
ISDBA 會話中SYSDBA腳色響應,返回TRUE
SESSIONID 返回審計會話標示符
ENTRYID 返回可用的審計項標示符
INSTANCE在會話連接后,返回實例標示符。該值只用于運行Parallel 服務器并且有 多個實例的情況下使用。
LANGUAGE返回語言、地域、數據庫設置的字符集。
LANG返回語言名稱的ISO縮寫。
TERMINAL為當前會話使用的終端或計算機返回操作系統的標示符。
VSIZE()??????????? x是一個表達式。返回x內部表示的字節數。
二、SQL中的組函數
組函數也叫集合函數,返回基于多個行的單一結果,行的準確數量無法確定,除非查詢被執行并且所有的結果都被包含在內。與單行函數不同的是,在解析時所有的行都是已知的。由于這種差別使組函數與單行函數有在要求和行為上有微小的差異.
1、組(多行)函數
與單行函數相比,oracle提供了豐富的基于組的,多行的函數。這些函數可以在select或select的having子句中使用,當用于select子串時常常都和GROUP BY一起使用。
AVG([{DISYINCT|ALL}])
返回數值的平均值。缺省設置為ALL
| SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413 |
COUNT({*|DISTINCT|ALL} )
返回查詢中行的數目,缺省設置是ALL,*表示返回所有的行。
MAX([{DISTINCT|ALL}])
返回選擇列表項目的最大值,如果x是字符串數據類型,他返回一個VARCHAR2數據類型,如果X是一個DATA數據類型,返回一個日期,如果X是numeric數據類型,返回一個數字。注意distinct和all不起作用,應為最大值與這兩種設置是相同的。
MIN([{DISTINCT|ALL}])
返回選擇列表項目的最小值。
STDDEV([{DISTINCT|ALL}])
返回選者的列表項目的標準差,所謂標準差是方差的平方根。
SUM([{DISTINCT|ALL}])
返回選擇列表項目的數值的總和。
VARIANCE([{DISTINCT|ALL}])
返回選擇列表項目的統計方差。
2、用GROUP BY給數據分組
正如題目暗示的那樣組函數就是操作那些已經分好組的數據,我們告訴數據庫用GROUP BY怎樣給數據分組或者分類,當我們在SELECT語句的SELECT子句中使用組函數時,我們必須把為分組或非常數列放置在GROUP BY子句中,如果沒有用group by進行專門處理,那么缺省的分類是將整個結果設為一類。
| select stat,counter(*) zip_count from zip_codes GROUP BY state; ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982 |
在這個例子中,我們用state字段分類;如果我們要將結果按照zip_codes排序,可以用ORDER BY語句,ORDER BY子句可以使用列或組函數。
| select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC; ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982 |
3、用HAVING子句限制分組數據
現在你已經知道了在查詢的SELECT語句和ORDER BY子句中使用主函數,組函數只能用于兩個子串中,組函數不能用于WHERE子串中,例如下面的查詢是錯誤的:
錯誤SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' AND SUM(sale_amount)>10000 GROUP BY sales_clerk
這個語句中數據庫不知道SUM()是什么,當我們需要指示數據庫對行分組,然后限制分組后的行的輸出時,正確的方法是使用HAVING語句:
| SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' GROUP BY sales_clerkHAVING SUM(sale_amount)>10000; |
4、嵌套函數
函數可以嵌套。一個函數的輸出可以是另一個函數的輸入。操作數有一個可繼承的執行過程。但函數的優先權只是基于位置,函數遵循由內到外,由左到右的原則。嵌套技術一般用于象DECODE這樣的能被用于邏輯判斷語句IF....THEN...ELSE的函數。
嵌套函數可以包括在組函數中嵌套單行函數,或者組函數嵌套入單行函數或組函數中。比如下面的例子:
SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,
COUNT(DISTINCT job) jobs,COUNT(DISTINCT mgr) mgrsFROM empGROUP BY deptno;
DEPTNO CNT JOBS MGRS------ --- ---- ----10 4 4 220 4 3 430 3 3 2
總結
以上是生活随笔為你收集整理的oracle易忘函数用法(6)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 恒昌贷款协商还款要注意什么
- 下一篇: Oracle中Decode()函数使用技