Problema:
Desea limitar el número de filas resultantes de una consulta en Oracle.
Ejemplo:
En el exam
tabla, hay nombres de los estudiantes con los resultados del examen.
nombre | resultado_examen |
---|---|
Janet Morgen | 9 |
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Ellen Thornton | 8 |
Quiere obtener las tres filas con los mejores resultados en el examen.
Solución 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
El resultado de la consulta se ve así:
nombre | resultado_examen |
---|---|
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Discusión:
En el FROM
cláusula, use una subconsulta que ordene las filas por el exam_result
columna en orden descendente.
SELECT * FROM exam ORDER BY exam_result DESC
En la consulta principal, escriba una condición para que el número de filas sea menor o igual a 3
. Use ROWNUM (el número de fila) para hacerlo. Para asegurarse de que verá solo las primeras tres filas, necesita una condición de que el número de fila debe ser menor o igual a 3
.
WHERE ROWNUM <= 3
Necesita una subconsulta solo para ordenar las filas. Si desea tres filas al azar en lugar de las tres mejores, simplemente escriba el nombre de la tabla en lugar de la subconsulta.
SELECT * FROM exam WHERE ROWNUM <= 3;
¡Cuidado! Esto no funcionará cuando busque filas con un número mayor que algún valor (por ejemplo, ROWNUM > 2
no devolverá ninguna fila).