sql >> Database teknologi >  >> RDS >> Oracle

Skriv en forespørgsel for at finde navnet på den eller de studerende, der har opnået maksimal karakter i Software Engineering. Sorter resultatet efter navn

Udover det faktum, at du bruger forældet implicit kommasyntaks til joinforbindelser, kombinerer du også kolonner i tabellerne på den forkerte måde i underforespørgslen.

subject_name er en kolonne med subject som ikke har noget at gøre med elevens forhold til karakterer. Så karakter kan sammensættes separat med emne, mens student_id'erne med højeste karakter bestemmes. Vi kan derefter få navnet på eleven ved at bruge disse student_id'er

Så i Oracle 12c og nyere kunne du gøre

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;  
 

For tidligere versioner kan du bruge dense_rank eller 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. Kan ikke installere php-mysqli-udvidelsen på Centos

  2. Kan ikke åbne databasetest anmodet af login. Login mislykkedes. Login mislykkedes for brugeren 'xyz\ASPNET'

  3. postgres:Hvad laver forespørgslen 'vælg * fra bruger' egentlig?

  4. Hvordan UPSERT (FLETT, INDSÆT ... PÅ DUPLIKAT OPDATERING) i PostgreSQL?