Problema:
Você deseja limitar o número de linhas resultantes de uma consulta no Oracle.
Exemplo:
No
exam tabela, há nomes dos alunos com os resultados do exame. | nome | exam_result |
|---|---|
| Janet Morgen | 9 |
| Taya Bain | 11 |
| Anne Johnson | 11 |
| Josh Kaur | 10 |
| Ellen Thornton | 8 |
Você deseja obter as três linhas com os melhores resultados do exame.
Solução 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
O resultado da consulta fica assim:
| nome | exam_result |
|---|---|
| Taya Bain | 11 |
| Anne Johnson | 11 |
| Josh Kaur | 10 |
Discussão:
No
FROM cláusula, use uma subconsulta que classifica as linhas pelo exam_result coluna em ordem decrescente. SELECT * FROM exam ORDER BY exam_result DESC
Na consulta principal, escreva uma condição para que o número de linhas seja menor ou igual a
3 . Use ROWNUM (o número da linha) para fazer isso. Para garantir que você veja apenas as três primeiras linhas, você precisa de uma condição de que o número da linha seja menor ou igual a 3 . WHERE ROWNUM <= 3
Você precisa de uma subconsulta apenas para classificar as linhas. Se você quiser três linhas aleatoriamente em vez das três melhores, simplesmente escreva o nome da tabela em vez da subconsulta.
SELECT * FROM exam WHERE ROWNUM <= 3;
Atenção! Isso não funcionará quando você estiver procurando por linhas com um número maior que algum valor (por exemplo,
ROWNUM > 2 não retornará nenhuma linha.)