sql >> Databáze >  >> RDS >> Oracle

provádět výpočty na datech typu tabulka

Existuje důvod, proč ji ve svém dotazu nevybrat?

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;

Tím se do vašeho záznamu vloží nové pole s názvem avg_score s průměrným skóre pro daného studenta.

EDIT:Alternativně můžete vytvořit deklaraci TYPE na úrovni databáze pro strukturu záznamu. Pokud chcete použít DML na objektovém typu, budete jej muset vytvořit na úrovni databáze, nikoli na úrovni PL/SQL, protože databáze nezná typy definované 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;

Poté ve vašem kódu:

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;

Naprosto nevyzkoušeno. To je však obecná myšlenka.




  1. Proč COUNT() zobrazuje pouze jeden řádek tabulky?

  2. SELECT DISTINCT Nefunguje Android SQLite

  3. Java nespouští příkazy přípravy s parametrem

  4. Příklady GETDATE() v SQL Server (T-SQL)