Using Analytic Functions: AVG(Mark) OVER(PARTITION BY StudentID ORDER BY StudentID, Mark RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW : Over « Analytical Functions « Oracle PL / SQL






Using Analytic Functions: AVG(Mark) OVER(PARTITION BY StudentID ORDER BY StudentID, Mark RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

  
SQL>
SQL>
SQL> CREATE TABLE SAT (
  2     StudentID  INT NOT NULL,
  3     ExamID     INT NOT NULL,
  4     Mark       INT,
  5     IfPassed   SMALLINT,
  6     Comments   VARCHAR(255),
  7     CONSTRAINT PK_SAT PRIMARY KEY (StudentID, ExamID));

Table created.

SQL>
SQL>
SQL> INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,1,55,1,'Satisfactory');

1 row created.

SQL> INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,2,73,1,'Good result');

1 row created.

SQL> INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,3,44,1,'Hard');

1 row created.

SQL> INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,5,39,0,'Simple');

1 row created.

SQL> INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed) VALUES (2,6,63,1);

1 row created.

SQL>
SQL>
SQL> SELECT StudentID, Mark, AVG(Mark) OVER
  2  (PARTITION BY StudentID
  3   ORDER BY StudentID, Mark
  4   RANGE BETWEEN UNBOUNDED PRECEDING AND
  5   CURRENT ROW
  6   ) Running_Avg_by_Student
  7  FROM SAT
  8  ORDER BY StudentID, Mark;

 STUDENTID       MARK RUNNING_AVG_BY_STUDENT
---------- ---------- ----------------------
         1         55                     55
         1         73                     64
         2         39                     39
         2         44                   41.5
         2         63             48.6666667

5 rows selected.

SQL>
SQL>
SQL>
SQL>
SQL> drop table SAT;

Table dropped.

   
    
  








Related examples in the same category

1.Include a final ordering of the result set with an ORDER BY at the end of the query
2.sum over (nothing)
3.sum over partition by, order by
4.Get Products: RANK() OVER in subquery
5.Lag salary over, lead salary over
6.Using Analytic Functions AVG(Mark) OVER (PARTITION BY StudentID ORDER BY StudentID, Mark)
7.Using Analytic Functions: AVG(Mark) OVER
8.Using Analytic Functions: AVG(Mark) OVER (ORDER BY StudentID, Mark)
9.Using Analytic Functions: AVG(Mark) OVER(PARTITION BY StudentID ORDER BY StudentID, Mark ROWS 1 preceding
10.Use over partition in subquery