Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / Analytical Functions
 

Displaying a Running Total Using SUM as an Analytical Function

SQL> SQL> -- create demo table SQL> create table myTable(   2    id           NUMBER(2),   3    value        NUMBER(6,2)   4  )   5  / Table created. SQL> SQL> -- prepare data SQL> insert into myTable(ID,  value)values (1,9); 1 row created. SQL> insert into myTable(ID,  value)values (2,2.11); 1 row created. SQL> insert into myTable(ID,  value)values (3,3.44); 1 row created. SQL> insert into myTable(ID,  value)values (4,-4.21); 1 row created. SQL> insert into myTable(ID,  value)values (5,10); 1 row created. SQL> insert into myTable(ID,  value)values (6,3); 1 row created. SQL> insert into myTable(ID,  value)values (7,-5.88); 1 row created. SQL> insert into myTable(ID,  value)values (8,123.45); 1 row created. SQL> insert into myTable(ID,  value)values (9,98.23); 1 row created. SQL> insert into myTable(ID,  value)values (10,938.23); 1 row created. SQL> insert into myTable(ID,  value)values (11,984.23); 1 row created. SQL> insert into myTable(ID,  value)values (12,198.23); 1 row created. SQL> insert into myTable(ID,  value)values (13,928.87); 1 row created. SQL> insert into myTable(ID,  value)values (14,25.37); 1 row created. SQL> insert into myTable(ID,  value)values (15,918.3); 1 row created. SQL> insert into myTable(ID,  value)values (16,9.23); 1 row created. SQL> insert into myTable(ID,  value)values (17,8.23); 1 row created. SQL> SQL> select * from myTable   2  /         ID      VALUE ---------- ----------          1          9          2       2.11          3       3.44          4      -4.21          5         10          6          3          7      -5.88          8     123.45          9      98.23         10     938.23         11     984.23         12     198.23         13     928.87         14      25.37         15      918.3         16       9.23         17       8.23 17 rows selected. SQL> SQL> COLUMN "Running total" FORMAT 99,999.99 SQL> SELECT id "ID", value,   2    SUM(value) OVER(ORDER BY id   3      ROWS BETWEEN UNBOUNDED PRECEDING   4      AND CURRENT ROW) "Running total"   5  FROM myTable   6  ORDER BY id;         ID      VALUE Running total ---------- ---------- -------------          1          9          9.00          2       2.11         11.11          3       3.44         14.55          4      -4.21         10.34          5         10         20.34          6          3         23.34          7      -5.88         17.46          8     123.45        140.91          9      98.23        239.14         10     938.23      1,177.37         11     984.23      2,161.60         ID      VALUE Running total ---------- ---------- -------------         12     198.23      2,359.83         13     928.87      3,288.70         14      25.37      3,314.07         15      918.3      4,232.37         16       9.23      4,241.60         17       8.23      4,249.83 17 rows selected. SQL> SQL> -- clean the table SQL> drop table myTable   2  / Table dropped. SQL>