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.)