原始表A的数据如下:
STAT_DAY  TIMES PV
2011/7/18  1 100
2011/7/18  2 200
2011/7/18 3 300
2011/7/18  4 400
2011/7/18  5 500需要计算出得到如下的数据:
STAT_DAY  TIMES PV PV占比
2011/7/18 1 100 100/1500(100+200+300+400+500的PV总和)
2011/7/18  2 200 200/1500(100+200+300+400+500的PV总和)
2011/7/18  3 300 300/1500(100+200+300+400+500的PV总和)
2011/7/18 4 400 400/1500(100+200+300+400+500的PV总和)
2011/7/18  5 500 500/1500(100+200+300+400+500的PV总和)
请问这样的SQL语句如何写?

解决方案 »

  1.   

    不是复杂的可以吗?
    SQL> WITH t AS (
      2  SELECT '2011/7/18' stat_day,1 times, 100 pv FROM DUAL UNION ALL
      3  SELECT '2011/7/18' stat_day,2 times, 200 pv FROM DUAL UNION ALL
      4  SELECT '2011/7/18' stat_day,3 times, 300 pv FROM DUAL UNION ALL
      5  SELECT '2011/7/18' stat_day,4 times, 400 pv FROM DUAL UNION ALL
      6  SELECT '2011/7/18' stat_day,5 times, 500 pv FROM DUAL
      7  )
      8  SELECT t.*,
      9         pv || '/' || SUM(pv) OVER(PARTITION BY t.stat_day) PV占比
     10    FROM t
     11    ORDER BY t.stat_day,
     12             t.times
     13  ;STAT_DAY       TIMES         PV PV占比
    --------- ---------- ---------- --------------------------------------------------------------------------------
    2011/7/18          1        100 100/1500
    2011/7/18          2        200 200/1500
    2011/7/18          3        300 300/1500
    2011/7/18          4        400 400/1500
    2011/7/18          5        500 500/1500
      

  2.   


    select STAT_DAY, TIMES, PV, PV/SUM(PV) OVER(PARTITION BY STAT_DAY) RAT
    from table