Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

subquery - mendapatkan skor tertinggi

Metode tradisional adalah analitik MAX() (atau fungsi analitik lainnya):

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

Tapi saya mungkin lebih suka menggunakan PERTAMA (JAGA).

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'

Manfaat dari kedua pendekatan ini atas apa yang awalnya Anda sarankan adalah bahwa Anda hanya memindai tabel sekali, tidak perlu mengakses tabel atau indeks untuk kedua kalinya. Saya sangat merekomendasikan postingan blog Rob van Wijk tentang perbedaan di antara keduanya.

P.S. ini akan mengembalikan hasil yang berbeda, jadi mereka sedikit berbeda. Fungsi analitik akan mempertahankan duplikat jika dua siswa memiliki skor maksimum yang sama (ini juga yang akan dilakukan saran Anda). Fungsi agregat akan menghapus duplikat, mengembalikan catatan acak jika terjadi seri.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tentang Elemen Format RM di Oracle

  2. Cara Menghasilkan Pernyataan INSERT dari Query saat menggunakan SQLcl (Oracle)

  3. Bagaimana cara melewatkan nilai di blok anonim dengan parameter tabel plsql

  4. node.js oracledb Tidak Menyisipkan atau Memperbarui

  5. Parsing XML dengan ruang nama yang tidak dikenal di Oracle SQL