亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Oracle分析函數六——數據分布函數及報表函數

系統 1762 0

原創于2009年08月02日,2009年10月22日遷移至此。


Oracle 分析函數——數據分布函數及 報表 函數

CUME_DIST

功能描述:計算一行在組中的相對位置, CUME_DIST 總是返回大于 0 、小于或等于 1 的數,該數表示該行在 N 行中的位置。例如,在一個 3 行的組中,返回的累計分布值為 1/3 2/3 3/3

SAMPLE :下例中計算每個部門的員工按薪水排序依次累積出現的分布百分比

SELECT

department_id,

first_name||' '||last_name employee_name,

salary,

CUME_DIST() OVER (PARTITION BY department_id ORDER BY salary) AS cume_dist

FROM employees

Oracle分析函數六——數據分布函數及報表函數

NTILE

功能描述:將一個組分為 " 表達式 " 的散列表示,例如,如果表達式 =4 ,則給組中的每一行分配一個數(從 1 4 ),如果組中有 20 行,則給前 5 行分配 1 ,給下 5 行分配 2 等等。如果組的基數不能由表達式值平均分開,則對這些行進行分配時,組中就沒有任何 percentile 的行數比其它 percentile 的行數超過一行,最低的 percentile 是那些擁有額外行的 percentile 。例如,若表達式 =4 ,行數 =21 ,則 percentile=1 的有 5 行, percentile=2 的有 5 行等等。

SAMPLE :下例中把 6 行數據分為 4

SELECT

department_id,

first_name||' '||last_name employee_name,

salary,

NTILE(4) OVER (PARTITION BY department_id ORDER BY salary DESC) AS quartile

FROM employees

Oracle分析函數六——數據分布函數及報表函數

PERCENT_RANK

功能描述:和 CUME_DIST (累積分配)函數類似,對于一個組中給定的行來說,在計算那行的序號時,先減 1 ,然后除以 n-1 n 為組中所有的行數)。該函數總是返回 0 1 (包括 1 )之間的數。

SAMPLE :下例中如果 Khoo salary 2900 ,則 pr 值為 0.6 ,因為 RANK 函數對于等值的返回序列值是一樣的

SELECT

department_id,

first_name||' '||last_name employee_name,

salary,

PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary) AS pr

FROM employees

ORDER BY department_id,salary;

Oracle分析函數六——數據分布函數及報表函數

PERCENTILE_DISC

功能描述:返回一個與輸入的分布百分比值相對應的數據值,分布百分比的計算方法見函數 CUME_DIST ,如果沒有正好對應的數據值,就取大于該分布值的下一個值。

注意:本函數與 PERCENTILE_CONT 的區別在找不到對應的分布值時返回的替代值的計算方法不同

SAMPLE :下例中 0.7 的分布值在部門 30 中沒有對應的 Cume_Dist 值,所以就取下一個分布值 0.83333333 所對應的 SALARY 來替代

SELECT

department_id,

first_name||' '||last_name employee_name,

salary,

PERCENTILE_DISC(0.7) WITHIN GROUP (ORDER BY salary ) OVER (PARTITION BY department_id) "Percentile_Disc",

CUME_DIST() OVER (PARTITION BY department_id ORDER BY salary) "Cume_Dist"

FROM employees<!-- [if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75" style='width:400.5pt;height:270pt'><v:imagedata src="file:///C:/Users/bq_wang/AppData/Local/Temp/msohtmlclip1/01/clip_image007.png" o:title=""/></v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->

Oracle分析函數六——數據分布函數及報表函數

PERCENTILE_CONT

功能描述:返回一個與輸入的分布百分比值相對應的數據值,分布百分比的計算方法見函數 PERCENT_RANK ,如果沒有正好對應的數據值,就通過下面算法來得到值:

RN = 1+ (P*(N-1)) 其中 P 是輸入的分布百分比值, N 是組內的行數

CRN = CEIL(RN) FRN = FLOOR(RN)

if (CRN = FRN = RN) then

(value of expression from row at RN)

else

(CRN - RN) * (value of expression for row at FRN) +

(RN - FRN) * (value of expression for row at CRN)

注意:本函數與 PERCENTILE_DISC 的區別在找不到對應的分布值時返回的替代值的計算方法不同

算法太復雜,看不懂了 L

SAMPLE :在下例中,對于部門 60 Percentile_Cont 值計算如下:

P=0.7 N=5 RN =1+ (P*(N-1)=1+(0.7*(5-1))=3.8 CRN = CEIL(3.8)=4

FRN = FLOOR(3.8)=3

4 - 3.8 * 4800 + (3.8 - 3) * 6000 = 5760

SELECT

department_id,

first_name||' '||last_name employee_name,

salary,

PERCENTILE_DISC(0.7) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department_id) "Percentile_Disc",

PERCENTILE_CONT(0.7) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department_id) "Percentile_Cont",

PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary) "Percent_Rank"

FROM employees

Oracle分析函數六——數據分布函數及報表函數

總案例

SELECT

department_id,

first_name||' '||last_name employee_name,

salary,

CUME_DIST() OVER (PARTITION BY department_id ORDER BY salary) AS cume_dist, -- 數據分布百分比

NTILE(4) OVER (PARTITION BY department_id ORDER BY salary) AS quartile,-- 數據分布,以 NTILE 中的 exp 來計算

PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary) AS pr,-- 數據分布百分比,從 0 開始計

PERCENTILE_DISC(0.7) WITHIN GROUP (ORDER BY salary ) OVER (PARTITION BY department_id) "Percentile_Disc",-- 輸入的分布百分比值相對應的數據值

PERCENTILE_CONT(0.7) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department_id) "Percentile_Cont"-- 表達式太復雜了, ...

FROM employees

Oracle分析函數六——數據分布函數及報表函數

RATIO_TO_REPORT

功能描述:該函數計算 expression/(sum(expression)) 的值,它給出相對于總數的百分比,即當前行對 sum(expression) 的貢獻。

SAMPLE :下例計算每個員工的工資占該類員工總工資的百分比

SELECT

department_id,

first_name||' '||last_name employee_name,

salary,

RATIO_TO_REPORT(salary) OVER () AS rr

FROM employees

WHERE job_id = 'PU_CLERK';

REGR_ (Linear Regression) Functions

功能描述:這些線性回歸函數適合最小二乘法回歸線,有 9 個不同的回歸函數可使用。

REGR_SLOPE :返回斜率,等于 COVAR_POP(expr1, expr2) / VAR_POP(expr2)

REGR_INTERCEPT :返回回歸線的 y 截距,等于

AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)

REGR_COUNT :返回用于填充回歸線的非空數字對的數目

REGR_R2 :返回回歸線的決定系數,計算式為:

If VAR_POP(expr2) = 0 then return NULL

If VAR_POP(expr1) = 0 and VAR_POP(expr2) != 0 then return 1

If VAR_POP(expr1) > 0 and VAR_POP(expr2 != 0 then

return POWER(CORR(expr1,expr),2)

REGR_AVGX :計算回歸線的自變量 (expr2) 的平均值,去掉了空對 (expr1, expr2) 后,等于 AVG(expr2)

REGR_AVGY :計算回歸線的應變量 (expr1) 的平均值,去掉了空對 (expr1, expr2) 后,等于 AVG(expr1)

REGR_SXX 返回值等于 REGR_COUNT(expr1, expr2) * VAR_POP(expr2)

REGR_SYY 返回值等于 REGR_COUNT(expr1, expr2) * VAR_POP(expr1)

REGR_SXY: 返回值等于 REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2)

(下面的例子都是在 SH 用戶下完成的)

SAMPLE 1 :下例計算 1998 年最后三個星期中兩種產品( 260 270 )在周末的銷售量中已開發票數量和總數量的累積斜率和回歸線的截距

SELECT t.fiscal_month_number "Month", t.day_number_in_month "Day",

REGR_SLOPE(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month) AS CUM_SLOPE,

REGR_INTERCEPT(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month) AS CUM_ICPT

FROM sales s, times t

WHERE s.time_id = t.time_id

AND s.prod_id IN (270, 260)

AND t.fiscal_year=1998

AND t.fiscal_week_number IN (50, 51, 52)

AND t.day_number_in_week IN (6,7)

ORDER BY t.fiscal_month_desc, t.day_number_in_month;

SAMPLE 2 :下例計算 1998 4 月每天的累積交易數量

SELECT UNIQUE t.day_number_in_month,

REGR_COUNT(s.amount_sold, s.quantity_sold)

OVER (PARTITION BY t.fiscal_month_number ORDER BY t.day_number_in_month)

"Regr_Count"

FROM sales s, times t

WHERE s.time_id = t.time_id

AND t.fiscal_year = 1998 AND t.fiscal_month_number = 4;

SAMPLE 3 :下例計算 1998 年每月銷售量中已開發票數量和總數量的累積回歸線決定系數

SELECT t.fiscal_month_number,

REGR_R2(SUM(s.amount_sold), SUM(s.quantity_sold))

OVER (ORDER BY t.fiscal_month_number) "Regr_R2"

FROM sales s, times t

WHERE s.time_id = t.time_id

AND t.fiscal_year = 1998

GROUP BY t.fiscal_month_number

ORDER BY t.fiscal_month_number;

SAMPLE 4 :下例計算 1998 12 月最后兩周產品 260 的銷售量中已開發票數量和總數量的累積平均值

SELECT t.day_number_in_month,

REGR_AVGY(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month)

"Regr_AvgY",

REGR_AVGX(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month)

"Regr_AvgX"

FROM sales s, times t

WHERE s.time_id = t.time_id

AND s.prod_id = 260

AND t.fiscal_month_desc = '1998-12'

AND t.fiscal_week_number IN (51, 52)

ORDER BY t.day_number_in_month;

SAMPLE 5 :下例計算產品 260 270 1998 2 月周末銷售量中已開發票數量和總數量的累積 REGR_SXY, REGR_SXX, and REGR_SYY 統計值

SELECT t.day_number_in_month,

REGR_SXY(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_sxy",

REGR_SYY(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_syy",

REGR_SXX(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_sxx"

FROM sales s, times t

WHERE s.time_id = t.time_id

AND prod_id IN (270, 260)

AND t.fiscal_month_desc = '1998-02'

AND t.day_number_in_week IN (6,7)

ORDER BY t.day_number_in_month;

Oracle分析函數六——數據分布函數及報表函數


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 97精品国产高清在线看入口 | 国产成年| 日本欧美一二三区色视频 | 性欧美视频a毛片在线播放 性欧美视频在线观看 | 久久99国产亚洲高清 | 5060一级毛片| 久久精品亚洲一区二区三区浴池 | 99精品福利 | 涩涩视频观看 | 欧美久色| 在线亚洲欧洲国产综合444 | 亚洲国产精品日韩在线观看 | 玖玖草在线观看 | 美美女高清毛片视频黄的一免费 | 日本天天谢天天要天天爱 | 国产视频久久久久 | 日日舔夜夜摸 | 欧美肥老太婆交 | 不卡的在线视频免费观看 | 国产一区二三区 | 亚洲加勒比久久88色综合一区 | 欧美日韩国产超高清免费看片 | 国产精品小视频在线观看 | 欧美成人xx免费视频 | 日本精品一区 | 91色爱| 九九热这里只有 | 91情国产l精品国产亚洲区 | 高清中文字幕免费观在线 | 精品国产成人系列 | 四虎在线影视在线影库 | 夜夜操影院 | 四虎永久免费地址 | 一级片久久 | 亚洲人人爱 | 天天拍天天操 | 第四色奇米影视 | 欧美肥婆xxxx欧美另类 | 激情综合婷婷亚洲图片 | 国产亚洲一区二区三区 | 亚洲欧洲国产精品久久 |