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

truy vấn phụ - đạt điểm cao nhất

Phương pháp truyền thống là phân tích MAX() (hoặc chức năng phân tích khác):

select *
  from ( select s.student_id
              , w.last_name
              , w.first_name
              , s.numeric_grade
              , max(s.numeric_grade) over () as numeric_final_grade
           from grade s
           join section z
             on s.section_id = z.section_id
           join student w
             on s.student_id = w.student_id
          where z.course_no = 230 
            and z.section_id = 100 
            and s.grade_type_code = 'FI'
                )
 where numeric_grade = numeric_final_grade

Nhưng tôi có thể thích sử dụng FIRST (GIỮ).

select max(s.student_id) keep (dense_rank first order by s.numeric_grade desc) as student_id
     , max(w.last_name) keep (dense_rank first order by s.numeric_grade desc) as last_name
     , max(w.first_name) keep (dense_rank first order by s.numeric_grade desc) as first_na,e
     , max(s.numeric_grade_name) as numeric_final_grade
  from grade s
  join section z
    on s.section_id = z.section_id
  join student w
    on s.student_id = w.student_id
 where z.course_no = 230 
   and z.section_id = 100 
   and s.grade_type_code = 'FI'

Lợi ích của cả hai cách tiếp cận này so với những gì bạn đề xuất ban đầu là bạn chỉ quét bảng một lần, không cần phải truy cập bảng hoặc chỉ mục lần thứ hai. Tôi thực sự có thể giới thiệu bài đăng trên blog của Rob van Wijk về sự khác biệt giữa hai điều này.

P.S. chúng sẽ trả về các kết quả khác nhau, vì vậy chúng hơi khác nhau. Hàm phân tích sẽ duy trì các bản sao là hai sinh viên có cùng điểm tối đa (đây là những gì gợi ý của bạn cũng sẽ làm được). Hàm tổng hợp sẽ xóa các bản sao, trả về một bản ghi ngẫu nhiên trong trường hợp hòa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy xuất thông tin cột (khóa tổng hợp) trong SQL

  2. mẫu tên không hợp lệ khi cố gắng chuyển ánh xạ đối tượng loại oracle tùy chỉnh

  3. Xem ứng dụng oracle và nhận:java.lang.ClassNotFoundException:oracle.forms.engine.Main

  4. cách lấy tên của phân vùng trong oracle khi tôi nhập ngày tháng

  5. Oracle:SQL động