Oracle PL/SQL Tutorial/Analytical Functions/UNBOUNDED
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>
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>
SQL>
SQL> -- clean the table
SQL> drop table myTable
2 /
Table dropped.
SQL>
SQL>
SQL>
Unbounded Following
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
ID VALUE
---------- ----------
12 198.23
13 928.87
14 25.37
15 918.3
16 9.23
17 8.23
17 rows selected.
SQL>
SQL>
SQL> SELECT id "ID", value,
2 SUM(value) OVER(ORDER BY id
3 ROWS BETWEEN CURRENT ROW
4 AND UNBOUNDED FOLLOWING) "Running total"
5 FROM myTable
6 ORDER BY id;
ID VALUE Running total
---------- ---------- -------------
1 9 4,249.83
2 2.11 4,240.83
3 3.44 4,238.72
4 -4.21 4,235.28
5 10 4,239.49
6 3 4,229.49
7 -5.88 4,226.49
8 123.45 4,232.37
9 98.23 4,108.92
10 938.23 4,010.69
11 984.23 3,072.46
ID VALUE Running total
---------- ---------- -------------
12 198.23 2,088.23
13 928.87 1,890.00
14 25.37 961.13
15 918.3 935.76
16 9.23 17.46
17 8.23 8.23
17 rows selected.
SQL>
SQL>
SQL>
SQL> -- clean the table
SQL> drop table myTable
2 /
Table dropped.
SQL>
SQL>