打印本文 打印本文 关闭窗口 关闭窗口
Oracle 9i 分析函数参考手册
作者:武汉SEO闵涛  文章来源:敏韬网  点击数6977  更新时间:2009/4/22 22:03:05  文章录入:mintao  责任编辑:mintao
nbsp;           17000          1
           90 King                           24000          3


RATIO_TO_REPORT
功能描述:该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比,即当前行对sum(expression)的贡献。
SAMPLE:下例计算每个员工的工资占该类员工总工资的百分比

SELECT last_name, salary, RATIO_TO_REPORT(salary) OVER () AS rr
  FROM employees
WHERE job_id = ''''PU_CLERK'''';

LAST_NAME                     SALARY         RR
------------------------- ---------- ----------
Khoo                            3100 .223021583
Baida                           2900 .208633094
Tobias                          2800 .201438849
Himuro                          2600  .18705036
Colmenares                      2500 .179856115


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;

     Month        Day  CUM_SLOPE   CUM_ICPT
---------- ---------- ---------- ----------
        12         12        -68       1872
        12         12        -68       1872
        12         13 -20.244898 1254.36735
        12         13 -20.244898 1254.36735
        12         19 -18.826087       1287
        12         20 62.4561404  125.28655
        12         20 62.4561404  125.28655
        12         20 62.4561404  125.28655
        12         20 62.4561404  125.28655
        12         26 67.2658228 58.9712313
        12         26 67.2658228 58.9712313
        12         27 37.5245541 284.958221
        12         27 37.5245541 284.958221
        12         27 37.5245541 284.958221

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;

DAY_NUMBER_IN_MONTH Regr_Count
------------------- ----------
                  1        825
                  2       1650
                  3       2475
                  4       3300
.
.
.
                 26      21450
                 30      22200

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;

FISCAL_MONTH_NUMBER    Regr_R2
------------------- ----------
                  1
                  2          1
                  3 .927372984
                  4 .807019972
                  5 .932745567
                  6  .94682861
                  7 .965342011
                  8 .955768075
                  9 .959542618
                 10 .938618575
                 11 .880931415
                 12 .882769189

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;

DAY_NUMBER_IN_MONTH  Regr_AvgY  Regr_AvgX
------------------- ---------- ----------
                 14  &nbs

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页

打印本文 打印本文 关闭窗口 关闭窗口