Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

thực hiện các phép tính trên dữ liệu trong loại bảng

Có lý do gì để không chọn nó trong truy vấn của bạn?

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;

Điều đó sẽ đưa một trường mới vào hồ sơ của bạn có tên là avg_score, với điểm trung bình cho một sinh viên nhất định.

CHỈNH SỬA:Ngoài ra, bạn có thể tạo khai báo TYPE mức cơ sở dữ liệu cho cấu trúc bản ghi. Nếu bạn muốn sử dụng DML trên một kiểu đối tượng, bạn sẽ phải tạo nó ở cấp cơ sở dữ liệu, không phải ở cấp PL / SQL, vì cơ sở dữ liệu không biết về các kiểu được định nghĩa 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;

Sau đó, trong mã của bạn:

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;

Hoàn toàn chưa được kiểm tra. Tuy nhiên, đó là ý tưởng chung.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. COUNT (rowid) có nhanh hơn COUNT (*) không?

  2. gọi một thủ tục được lưu trữ với tham số đầu vào và con trỏ ra trong tập lệnh perl

  3. cách cập nhật dữ liệu bằng cách sử dụng truy vấn ngủ đông có thuộc tính mẹ trong mệnh đề where

  4. Oracle SQL - Tính tổng và nhóm dữ liệu theo tuần

  5. Đọc clob từng dòng với pl \ sql