Problème :
Vous souhaitez limiter le nombre de lignes résultant d'une requête dans Oracle.
Exemple :
À l'exam
tableau, il y a les noms des étudiants avec les résultats de l'examen.
nom | résultat_examen |
---|---|
Janet Morgen | 9 |
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Ellen Thornton | 8 |
Vous voulez obtenir les trois lignes avec les meilleurs résultats d'examen.
Solution 1 :
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Le résultat de la requête ressemble à ceci :
nom | résultat_examen |
---|---|
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Discussion :
Dans le FROM
clause, utilisez une sous-requête qui trie les lignes par exam_result
colonne par ordre décroissant.
SELECT * FROM exam ORDER BY exam_result DESC
Dans la requête principale, écrivez une condition selon laquelle le nombre de lignes doit être inférieur ou égal à 3
. Utilisez ROWNUM (le numéro de ligne) pour le faire. Pour vous assurer que vous ne verrez que les trois premières lignes, vous avez besoin d'une condition selon laquelle le numéro de ligne doit être inférieur ou égal à 3
.
WHERE ROWNUM <= 3
Vous avez besoin d'une sous-requête juste pour trier les lignes. Si vous souhaitez trois lignes au hasard au lieu des trois meilleures, écrivez simplement le nom de la table au lieu de la sous-requête.
SELECT * FROM exam WHERE ROWNUM <= 3;
Fais attention! Cela ne fonctionnera pas lorsque vous recherchez des lignes avec un nombre supérieur à une certaine valeur (par exemple, ROWNUM > 2
ne renverra aucune ligne.)