Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Napisz zapytanie, aby znaleźć nazwisko studenta(ów), który uzyskał maksymalną ocenę z inżynierii oprogramowania. Sortuj wynik na podstawie nazwy

Oprócz tego, że używasz przestarzałej składni niejawnych przecinków dla złączeń, łączysz także kolumny tabel w niewłaściwy sposób w podzapytaniu.

subject_name to kolumna subject co nie ma nic wspólnego ze stosunkiem ucznia do ocen. Tak więc ocenę można łączyć osobno z przedmiotem przy ustalaniu identyfikatorów studenta z najwyższą oceną. Następnie możemy uzyskać imię i nazwisko ucznia, korzystając z tych identyfikatorów student_id

Tak więc w Oracle 12c i nowszych możesz to zrobić

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;  

W przypadku poprzednich wersji możesz użyć dense_rank lub 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. Błąd Oracle podczas uruchamiania, trwa kolejna operacja uruchamiania/zamykania tej instancji

  2. Jak usunąć przyczynę wystąpienia wyjątku Hibernate IllegalArgumentException podczas wywoływania setter?

  3. Obsługa ExecuteScalar(), gdy nie są zwracane żadne wyniki

  4. Java:Zwracanie danych XMLType z StoredProcedure, użycie ojdbc6.jar xdb6.jar xmlparserv2.jar do interakcji Java z PLSQL

  5. java.sql.SQLException:Wyjątek Io:Otrzymano minus jeden z wywołania odczytu podczas połączenia JDBC z Oracle