紙飛機

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

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

          ENAME              SAL RUNNING_DIFF

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

          MILLER            1300          1300

          CLARK             2450         -1150

          KING              5000         -6150

          解決方案

          DB2和Oracle

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

          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

          使用標量子查詢計算累計差:

          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

          討論

          該解決方案與“生成累計和”一節(jié)介紹的解決方案大致相同。唯一的差別是:SAL除了第一個值(因為要從DEPTNO 10的SAL開始)之外,其余所有值都返回負值。

          posted on 2008-05-14 21:42 紙飛機 閱讀(576) 評論(0)  編輯  收藏 所屬分類: Database
          主站蜘蛛池模板: 和龙市| 贵德县| 临泽县| 太白县| 施秉县| 瑞安市| 湛江市| 重庆市| 河西区| 长泰县| 封开县| 西和县| 门源| 永和县| 敖汉旗| 黄浦区| 惠安县| 界首市| 湖南省| 磐安县| 佛教| 昌都县| 龙南县| 卢龙县| 佛坪县| 巢湖市| 开远市| 浮梁县| 疏勒县| 江都市| 甘洛县| 涿州市| 黄石市| 镇坪县| 中超| 宝山区| 哈尔滨市| 宕昌县| 吉隆县| 青海省| 镇雄县|