Oracle
 sql >> Baza danych >  >> RDS >> Oracle

wykonać obliczenia na danych w formie tabeli

Czy istnieje powód, aby nie wybierać go w zapytaniu?

select x.student_id as student_id, cr.course_id as course_i
     , g.score as grade, AVG(g.score) OVER (PARTITION BY x.student_id) as avg_score
 from sf x, grade g, class cs, course cr
where x.no_of_courses>4 
  and x.student_id = g.student_id 
  and cs.course_id = cr.course_id
  and g.class_id = cs.class_id;

Spowoduje to dodanie do Twojego rekordu nowego pola o nazwie avg_score ze średnim wynikiem dla danego ucznia.

EDYCJA:Alternatywnie można utworzyć deklarację TYPE na poziomie bazy danych dla struktury rekordów. Jeśli chcesz użyć DML na typie obiektu, musisz utworzyć go na poziomie bazy danych, a nie na poziomie PL/SQL, ponieważ baza danych nie zna typów zdefiniowanych w PL/SQL.

CREATE OR REPLACE TYPE t_rec AS OBJECT
(
  student_id number,
  course_id number,
  grade number
);

CREATE OR REPLACE TYPE abc AS TABLE OF t_rec;

Następnie w swoim kodzie:

FOR Rec IN (SELECT student_id, AVG(grade) avg_grade 
              FROM TABLE ( cast( v1 as abc) )
             GROUP BY student_id) 
LOOP
   dbms_output.put_line(Rec.student_id, Rec.avg_grade);
END LOOP;

Całkowicie niesprawdzony. To jest jednak ogólna idea.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykonać procedurę składowaną Oracle?

  2. Typ danych SQL do wykorzystania podczas wpłacania pieniędzy

  3. Jaka jest podwójna tabela w Oracle?

  4. Długość przechowywania BLOB w Oracle

  5. asp classic jak łapać błędy podczas łączenia się z serwerem Oracle Linked