Duda de un novato

Jose
24 de Enero del 2006
Tengo una duda.
Tengo una tabla de base de datos con tres campos:
nombre del evento, numero de serie y numero de ocurrencias.
Necesito seleccionar de dicha tabla los 10 registros que tienen un mayor número de ocurrencias, pero no se me ocurre como hacer (seguramente sera porque soy novato en esto)
Alguna sugerencia??? Gracias

Rodolfo Reyes
24 de Enero del 2006
Lo puedes hacer por medio del rownum (este nombre de campo se puede utilizar el los querys, al popnerlo te indica el numero de fila). El unico problema con el rownum es que este coloca el correlativo antes de hacer el ORDER BY entonces tienes que hacer un query en el FROM como el siguiente:


select nombre,numero_serie,numero_ocurrencias,rownum
FROM (select nombre, numero_serie,numero_ocurrencias
from tabla
order by numero_ocurrencias desc
)
WHERE rownum <= 10


Un pequeño problema con lo anterior es que no funciona en Developer, el developer no soporta poner un ORDER BY en un query en el FROM. Pero a nivel de procedimientos almacenados, SQL Plus, etc. funciona muy bien.

andrewsreid
24 de Enero del 2006
Aquí está un ejemplo de lo que quieres hacer:

1 select segment_name, bytes from
2 (select segment_name, bytes from dba_segments order by 2 desc)
3* where rownum <= 10
SQL> /


SEGMENT_NAME BYTES
------------------------------ ----------
UARAPPL 1.2373E+10
UABOPEN 6815744000
UARAPPL_KEY_INDEX 5767168000
UARAPPL_TO_INDEX 5242880000
UARAPPL_GL_IND_INDEX 3145728000
UARCHGI 2097152000
UABOPEN_KEY_INDEX 1497071616
UABADJE 1179648000
AUABOPEN_1 1038090240
URRSHIS 1023836160

10 rows selected.

SQL>

Buena suerte,

Andrew

andrewsreid
24 de Enero del 2006
Aquí está otro ejemplo pero funciona muy lentamente en grandes tablas:

1 select table_name, nvl(num_rows,0) from dba_tables x where
2 (select count(*) from dba_tables where nvl(num_rows,0) >= nvl(x.num_rows,0)) <= 10
3* order by 2 desc
SQL> /


TABLE_NAME NVL(NUM_ROWS,0)
------------------------------ ---------------
UARAPPL 164810334
UABOPEN 21279773
UARCHGI 12667177
UXBDOCC 8030490
UABADJE 7686137
UBTINTC 7479495
URRSHIS 6075269
UBBCHST 4002089
UBBBHST 3302916
UARPREQ 2644742

10 rows selected.

SQL>