紙飛機(jī)

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            22 隨筆 :: 28 文章 :: 30 評(píng)論 :: 0 Trackbacks

          問題:對(duì)于數(shù)字列中的值,計(jì)算其累計(jì)差。例如,計(jì)算DEPTNO 10中工資的累計(jì)差。要返回下列結(jié)果集:

          ENAME              SAL RUNNING_DIFF

          ---------- ---------- ------------

          MILLER            1300          1300

          CLARK             2450         -1150

          KING              5000         -6150

          解決方案

          DB2和Oracle

          使用窗口函數(shù)SUM OVER創(chuàng)建累計(jì)差:

          1   select ename,sal,

          2          sum(case when rn = 1 then sal else -sal end)

          3           over(order by sal,empno) as running_diff<>5   select empno,ename,sal,

          6          row_number()over(order by sal,empno) as rn

          7     from emp

          8    where deptno = 10

          9          ) x

          MySQL、PostgreSQL和SQL Server

          使用標(biāo)量子查詢計(jì)算累計(jì)差:

          1 select a.empno, a.ename, a.sal,

          2         (select case when a.empno = min(b.empno) then sum(b.sal)

          3                      else sum(-b.sal)

          4                 end

          5            from emp b

          6           where b.empno <= a.empno

          7             and b.deptno = a.deptno ) as rnk

          8    from emp a

          9   where a.deptno = 10

          討論

          該解決方案與“生成累計(jì)和”一節(jié)介紹的解決方案大致相同。唯一的差別是:SAL除了第一個(gè)值(因?yàn)橐獜腄EPTNO 10的SAL開始)之外,其余所有值都返回負(fù)值。

          posted on 2008-05-14 21:42 紙飛機(jī) 閱讀(576) 評(píng)論(0)  編輯  收藏 所屬分類: Database
          主站蜘蛛池模板: 灵川县| 绵竹市| 厦门市| 清远市| 东明县| 康乐县| 商洛市| 大石桥市| 柘城县| 额敏县| 安福县| 闽侯县| 金昌市| 清镇市| 毕节市| 合川市| 德江县| 洪江市| 莱芜市| 和林格尔县| 贵阳市| 新乡县| 康平县| 阿荣旗| 嵩明县| 建德市| 江源县| 五指山市| 文成县| 凤翔县| 桦甸市| 鹰潭市| 横山县| 河北区| 武平县| 靖西县| 浏阳市| 临夏市| 静宁县| 日土县| 锦州市|