sql >> データベース >  >> RDS >> Oracle

ソフトウェア工学で最高点を獲得した学生の名前を見つけるためにクエリを書いてください。名前に基づいて結果を並べ替える

    結合に古い暗黙のコンマ構文を使用しているという事実とは別に、サブクエリでテーブルの列を間違った方法で結合していることもあります。

    subject_name subjectの列です これは、生徒のマークとの関係とは何の関係もありません。したがって、最高のマークを持つstudent_idsを決定する際に、マークをサブジェクトと個別に結合することができます。次に、それらのstudent_idsを使用して学生の名前を取得できます

    したがって、Oracle 12c以降では、次のことができます

    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;  
    

    以前のバージョンでは、dense_rankを使用できます または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. jQueryAjaxを介してPHP配列を渡す

    2. TableView 編集列 JAVA FX

    3. MySQLデータベースで最大のテーブルを見つける方法は?

    4. OracleFormsでのPL/SQLブール変数の評価