代码之家  ›  专栏  ›  技术社区  ›  Dave

Oracle计算涉及另一个计算的结果

  •  3
  • Dave  · 技术社区  · 17 年前

    SELECT cost, SUM(cost) OVER() AS total, cost / SUM(cost) OVER() AS per
    FROM my_table
    ORDER BY cost DESC
    

    以下是我试图做但不起作用的事情:

    SELECT cost, SUM(cost) OVER() AS total, cost / SUM(cost) OVER() AS per,
           SUM(cost/SUM(cost) OVER()) OVER(cost) AS per_sum
    FROM my_table
    ORDER BY cost DESC
    

    我只是做错了,还是我想做的事情根本不可能?顺便说一句,我使用的是Oracle 10g。提前感谢您的帮助。

    2 回复  |  直到 17 年前
        1
  •  2
  •   Quassnoi    17 年前

    举个例子:

    SQL> create table my_table(cost)
      2  as
      3  select 10 from dual union all
      4  select 20 from dual union all
      5  select 5 from dual union all
      6  select 50 from dual union all
      7  select 60 from dual union all
      8  select 40 from dual union all
      9  select 15 from dual
     10  /
    
    Table created.
    

    SQL> SELECT cost, SUM(cost) OVER() AS total, cost / SUM(cost) OVER() AS per
      2  FROM my_table
      3  ORDER BY cost DESC
      4  /
    
          COST      TOTAL        PER
    ---------- ---------- ----------
            60        200         .3
            50        200        .25
            40        200         .2
            20        200         .1
            15        200       .075
            10        200        .05
             5        200       .025
    
    7 rows selected.
    

    Quassnoi的查询包含一个拼写错误:

    SQL> SELECT  cost, total, per, SUM(running) OVER (ORDER BY cost)
      2  FROM    (
      3          SELECT  cost, SUM(cost) OVER() AS total, cost / SUM(cost) OVER() AS per
      4          FROM    my_table
      5          ORDER BY
      6                  cost DESC
      7          )
      8  /
    SELECT  cost, total, per, SUM(running) OVER (ORDER BY cost)
                                  *
    ERROR at line 1:
    ORA-00904: "RUNNING": invalid identifier
    

    如果我纠正了那个拼写错误。它给出了正确的结果,但排序错误(我猜):

    SQL> SELECT  cost, total, per, SUM(per) OVER (ORDER BY cost)
      2  FROM    (
      3          SELECT  cost, SUM(cost) OVER() AS total, cost / SUM(cost) OVER() AS per
      4          FROM    my_table
      5          ORDER BY
      6                  cost DESC
      7          )
      8  /
    
          COST      TOTAL        PER SUM(PER)OVER(ORDERBYCOST)
    ---------- ---------- ---------- -------------------------
             5        200       .025                      .025
            10        200        .05                      .075
            15        200       .075                       .15
            20        200         .1                       .25
            40        200         .2                       .45
            50        200        .25                        .7
            60        200         .3                         1
    
    7 rows selected.
    

    我想这就是你要找的:

    SQL> select cost
      2       , total
      3       , per
      4       , sum(per) over (order by cost desc)
      5    from ( select cost
      6                , sum(cost) over () total
      7                , ratio_to_report(cost) over () per
      8             from my_table
      9         )
     10   order by cost desc
     11  /
    
          COST      TOTAL        PER SUM(PER)OVER(ORDERBYCOSTDESC)
    ---------- ---------- ---------- -----------------------------
            60        200         .3                            .3
            50        200        .25                           .55
            40        200         .2                           .75
            20        200         .1                           .85
            15        200       .075                          .925
            10        200        .05                          .975
             5        200       .025                             1
    
    7 rows selected.
    

    罗布。

        2
  •  6
  •   Rob van Wijk    17 年前
    SELECT  cost, total, per, SUM(per) OVER (ORDER BY cost)
    FROM    (
            SELECT  cost, SUM(cost) OVER() AS total, cost / SUM(cost) OVER() AS per
            FROM    my_table
            )
    ORDER BY
            cost DESC
    
    推荐文章