2017-10-04 47 views
0

如何在Oracle 11g中获得以下输出?在Oracle中增加了列组件

Subjects  Marks  add_marks  %marks 
Maths 1  68  
Maths 2  50   118   45.73 
Maths 3  60   178   68.99 
Maths 4  80   258   100.00 
----------------------------------------------- 
Total   258 

我无法编写特别的add_marks列。它的增量性使事情变得复杂。

+0

不清楚可言,做你想做的事,你想除了什么什么什么? –

+0

@CyrilleMODIANO OP正在寻找'marks'列的累计总和。 – MT0

回答

4

使用SUM(...) OVER (ORDER BY ...)解析函数:

SQL Fiddle

的Oracle 11g R2架构设置

CREATE TABLE table_name (Subjects, Marks) AS 
SELECT 'Maths 1', 68 FROM DUAL UNION ALL 
SELECT 'Maths 2', 50 FROM DUAL UNION ALL 
SELECT 'Maths 3', 60 FROM DUAL UNION ALL 
SELECT 'Maths 4', 80 FROM DUAL; 

查询1

SELECT subjects, 
     marks, 
     SUM(marks) OVER (ORDER BY subjects) AS add_marks, 
     100 * SUM(marks) OVER (ORDER BY subjects)/SUM (MARKS) OVER() AS "%marks" 
FROM table_name 

Results

| SUBJECTS | MARKS | ADD_MARKS |    %marks | 
|----------|-------|-----------|--------------------| 
| Maths 1 | 68 |  68 | 26.356589147286822 | 
| Maths 2 | 50 |  118 | 45.736434108527135 | 
| Maths 3 | 60 |  178 | 68.9922480620155 | 
| Maths 4 | 80 |  258 |    100 |