問題:
Oracleでのクエリの結果の行数を制限したい。
例:
exam
表には、試験の結果が記載された生徒の名前があります。
name | Exam_result |
---|---|
Janet Morgen | 9 |
タヤベイン | 11 |
アンジョンソン | 11 |
Josh Kaur | 10 |
エレンソーントン | 8 |
最高の試験結果が得られる3行を取得したい。
ソリューション1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
クエリの結果は次のようになります:
name | Exam_result |
---|---|
Taya Bain | 11 |
アンジョンソン | 11 |
Josh Kaur | 10 |
ディスカッション:
FROM
内 句、exam_result
で行を並べ替えるサブクエリを使用します 降順の列。
SELECT * FROM exam ORDER BY exam_result DESC
メインクエリで、行数が3
以下であるという条件を記述します。 。これを行うには、ROWNUM(行番号)を使用します。最初の3行のみが表示されるようにするには、行番号が3
以下であるという条件が必要です。 。
WHERE ROWNUM <= 3
行を並べ替えるためだけにサブクエリが必要です。最良の3行ではなくランダムに3行が必要な場合は、サブクエリの代わりにテーブル名を入力するだけです。
SELECT * FROM exam WHERE ROWNUM <= 3;
気を付けて!これは、ある値よりも大きい数の行を探している場合は機能しません(たとえば、ROWNUM > 2
行は返されません。)