原始表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语句如何写?
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语句如何写?
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
select STAT_DAY, TIMES, PV, PV/SUM(PV) OVER(PARTITION BY STAT_DAY) RAT
from table