sql >> Databáze >  >> RDS >> Oracle

Napište dotaz a zjistěte jméno studenta (studentů), kteří dosáhli maximálního počtu bodů v softwarovém inženýrství. Seřaďte výsledek podle názvu

Kromě toho, že pro spojení používáte zastaralou implicitní syntaxi čárek, také nesprávným způsobem kombinujete sloupce tabulek v dílčím dotazu.

subject_name je sloupec subject což nemá nic společného se vztahem žáka ke známkám. Známku lze tedy spojit odděleně s předmětem a zároveň určit student_id s nejvyšší známkou. Poté můžeme získat jméno studenta pomocí těchto student_id

Takže v Oracle 12c a vyšším byste mohli udělat

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;  

Pro předchozí verze můžete použít dense_rank nebo 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. Yii Framework:Tabulku pro aktivní třídu záznamů nelze v databázi nalézt

  2. PL/SQL:Chyba PLS-00306:nesprávný počet nebo typy argumentů ve volání spouštěné pro tabulku čísel

  3. Jak zobrazit obrázek BLOB uložený v databázi MySql?

  4. Jedinečné omezení hodnoty ve více sloupcích