Sum salary over : SUM « Aggregate Functions « Oracle PL / SQL






Sum salary over

  

SQL>
SQL> create table emp
  2  ( empno      NUMBER(4)    constraint E_PK primary key
  3  , ename      VARCHAR2(8)
  4  , init       VARCHAR2(5)
  5  , job        VARCHAR2(8)
  6  , mgr        NUMBER(4)
  7  , bdate      DATE
  8  , sal       NUMBER(6,2)
  9  , comm       NUMBER(6,2)
 10  , deptno     NUMBER(2)    default 10
 11  ) ;

Table created.

SQL> insert into emp values(1,'Tom','N',   'TRAINER', 13,date '1965-12-17',  800 , NULL,  20);

1 row created.

SQL> insert into emp values(2,'Jack','JAM', 'Tester',6,date '1961-02-20',  1600, 300,   30);

1 row created.

SQL> insert into emp values(3,'Wil','TF' ,  'Tester',6,date '1962-02-22',  1250, 500,   30);

1 row created.

SQL> insert into emp values(4,'Jane','JM',  'Designer', 9,date '1967-04-02',  2975, NULL,  20);

1 row created.

SQL> insert into emp values(5,'Mary','P',  'Tester',6,date '1956-09-28',  1250, 1400,  30);

1 row created.

SQL> insert into emp values(6,'Black','R',   'Designer', 9,date '1963-11-01',  2850, NULL,  30);

1 row created.

SQL> insert into emp values(7,'Chris','AB',  'Designer', 9,date '1965-06-09',  2450, NULL,  10);

1 row created.

SQL> insert into emp values(8,'Smart','SCJ', 'TRAINER', 4,date '1959-11-26',  3000, NULL,  20);

1 row created.

SQL> insert into emp values(9,'Peter','CC',   'Designer',NULL,date '1952-11-17',  5000, NULL,  10);

1 row created.

SQL> insert into emp values(10,'Take','JJ', 'Tester',6,date '1968-09-28',  1500, 0,     30);

1 row created.

SQL> insert into emp values(11,'Ana','AA',  'TRAINER', 8,date '1966-12-30',  1100, NULL,  20);

1 row created.

SQL> insert into emp values(12,'Jane','R',   'Manager',   6,date '1969-12-03',  800 , NULL,  30);

1 row created.

SQL> insert into emp values(13,'Fake','MG',   'TRAINER', 4,date '1959-02-13',  3000, NULL,  20);

1 row created.

SQL> insert into emp values(14,'Mike','TJA','Manager',   7,date '1962-01-23',  1300, NULL,  10);

1 row created.

SQL>
SQL>
SQL> select mgr, ename, sal
  2  ,      sum(sal) over
  3         ( order by mgr, sal, EMPNO
  4           range unbounded preceding
  5         ) as cumulative
  6  from   emp
  7  order  by mgr, sal;

       MGR ENAME           SAL CUMULATIVE
---------- -------- ---------- ----------
         4 Smart          3000       3000
         4 Fake           3000       6000
         6 Jane            800       6800
         6 Wil            1250       8050
         6 Mary           1250       9300
         6 Take           1500      10800
         6 Jack           1600      12400
         7 Mike           1300      13700
         8 Ana            1100      14800
         9 Chris          2450      17250
         9 Black          2850      20100
         9 Jane           2975      23075
        13 Tom             800      23875
           Peter          5000      28875

14 rows selected.

SQL>
SQL>
SQL> drop table emp;

Table dropped.

   
    
  








Related examples in the same category

1.SUM: total for all NOT NULL values, accepts only numeric datatype values
2.Syntax: SUM([DISTINCT]|[ALL] )
3.GROUP BY function would produce inventory totals distributed across different vendors
4.SUM function and NULLs
5.Using the SUM function with GROUP BY Clause
6.sum with column calculation
7.Add an "OTHER" and "TOTAL" column to the report:
8.Compute sum on salary
9.Sum column for a certain time period
10.Sum salary group by department number
11.Sum() function and having clause
12.Doing calculation in sum() function
13.Wrap case when into sum() function