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

Viết truy vấn để tìm tên của (các) sinh viên đạt điểm tối đa trong ngành Kỹ thuật phần mềm. Sắp xếp kết quả dựa trên tên

Ngoài thực tế là bạn đang sử dụng cú pháp dấu phẩy ngầm đã lỗi thời cho các phép nối, bạn cũng đang kết hợp các cột của bảng theo cách sai trong truy vấn phụ.

subject_name là một cột của subject không liên quan gì đến mối quan hệ của học sinh với điểm. Vì vậy, đánh dấu có thể được kết hợp riêng với chủ đề trong khi xác định các học sinh có điểm cao nhất. Sau đó, chúng tôi có thể lấy tên của học sinh bằng các student_ids đó

Vì vậy, trong Oracle 12c trở lên, bạn có thể làm

SELECT s.student_name
   FROM student s
WHERE s.student_id IN ( SELECT m.student_id
                        FROM mark m JOIN subject su 
                         ON su.subject_id = m.subject_id
                        WHERE lower(su.subject_name) = 'software engineering'
                           ORDER BY m.value DESC
                        FETCH FIRST 1 ROWS WITH TIES ) order by 1;  

Đối với các phiên bản trước, bạn có thể sử dụng dense_rank hoặc rank

SELECT s.student_name
   FROM student s
WHERE s.student_id IN ( SELECT student_id
                        FROM ( SELECT m.*,DENSE_RANK() OVER(
                                    ORDER BY m.value DESC
                               ) AS rnk
                               FROM mark m  JOIN subject su 
                                ON su.subject_id = m.subject_id
                        WHERE lower(su.subject_name) = 'software engineering'
                    ) WHERE rnk = 1
               ) order by 1;     


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. trình tự ngày oracle?

  2. Định dạng ngày Oracle

  3. Thêm dữ liệu đã kết hợp vào kết quả truy vấn

  4. Không thể sử dụng DROP TABLE NẾU TỒN TẠI trong schema.sql cho ứng dụng Spring Boot

  5. Một ràng buộc kiểm tra có thể liên quan đến một bảng khác không? Oracle