Sum(col_name) Over(partition by col_name_2,col_name_3,… order by col_name_i,col_name_j,…)
将由Partition By语句中指定的属性列进行分组,并依据Order By语句指定的属性列实现组内排序,对分组内由Sum指定的属性列求和。
该函数与单独的Sum()函数的区别在于:每一条记录求和的结果是由同一分组内所有该记录之前的记录中属性列的值求和得来的!
[@more@]Analytic Example
The following example calculates, for each manager in the sample table hr.employees
, a cumulative total of salaries of employees who answer to that manager that are equal to or less than the current salary. You can see that Raphaely and Cambrault have the same cumulative total. This is because Raphaely and Cambrault have the identical salaries, so Oracle adds together their salary values and applies the same cumulative total to both rows.
SELECT manager_id, last_name, salary, SUM(salary) OVER (PARTITION BY manager_id ORDER BY salary RANGE UNBOUNDED PRECEDING) l_csum FROM employees; MANAGER_ID LAST_NAME SALARY L_CSUM ---------- --------------- ---------- ---------- 100 Mourgos 5800 5800 100 Vollman 6500 12300 100 Kaufling 7900 20200 100 Weiss 8000 28200 100 Fripp 8200 36400 100 Zlotkey 10500 46900 100 Raphaely 11000 68900 100 Cambrault 11000 68900 100 Errazuriz 12000 80900 . . . 149 Taylor 8600 30200 149 Hutton 8800 39000 149 Abel 11000 50000 201 Fay 6000 6000 205 Gietz 8300 8300 King 24000 24000
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7988176/viewspace-918943/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7988176/viewspace-918943/