Oracle - Registro mas repetido en una tabla ORACLE

   
Vista:

Registro mas repetido en una tabla ORACLE

Publicado por lucia04 (2 intervenciones) el 14/01/2016 19:35:19
Buenas
Necesito sacar de una tabla cual es el valor que mas veces se repite. Por ejemplo, una tabla de libros prestados, saber cual es el titulo que mas se ha prestado. Es algo asi:

nro_prestamo | cod_cliente | cod_libro

221 | 111 | 101
222 | 222 | 201
223 | 333 | 201
224 | 333 | 101
225 | 111 | 201
226 | 555 | 201
227 | 222 | 301
228 | 444 | 501


De esta tabla el mas repetido es el libro 201,
adicionalmente si tuviera otra tabla donde tengo cod_libro y titulo = 201, divina comedia, como haría para que a la final me quede solo el nombre del libro mas prestado.
He intentado con rownum y ordenar la cuenta, pero no me parece optimo. Recordando que no puedo hacer algo como max(count(cod_libro)) o no se si es que no se usarlo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Registro mas repetido en una tabla ORACLE

Publicado por Luis (232 intervenciones) el 14/01/2016 20:38:23
Hola, seria algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
SELECT Z.COD_LIBRO, Z.NOM_LIBRO FROM (
SELECT '201' COD_LIBRO, 'LA DIVINA COMEDIA' NOM_LIBRO FROM DUAL
UNION ALL
SELECT '202' , 'SEGUNDA GUERRA MUNDIAL' FROM DUAL )Z
WHERE Z.COD_LIBRO IN  (
SELECT  X.COD_LIBRO
FROM (
SELECT '221' nro_prestamo,  '111' cod_cliente , '101' cod_libro  FROM dual
UNION ALL
SELECT '222', '222', '201'  FROM dual
UNION ALL
SELECT '223', '333', '201'  FROM dual
UNION ALL
SELECT '224', '333', '101'  FROM dual
UNION ALL
SELECT  '225', '111', '201' FROM dual
UNION ALL
SELECT '226', '555',  '201' FROM dual
UNION ALL
SELECT '227', '222', '301' FROM dual
UNION ALL
SELECT '228', '444', '501' FROM dual ) X
GROUP BY  X.COD_LIBRO
HAVING COUNT(1) = (SELECT MAX(Y.CANTIDAD)
FROM  (
SELECT  X.COD_LIBRO, COUNT(1)  CANTIDAD
FROM (
SELECT '221' nro_prestamo,  '111' cod_cliente , '101' cod_libro  FROM dual
UNION ALL
SELECT '222', '222', '201'  FROM dual
UNION ALL
SELECT '223', '333', '201'  FROM dual
UNION ALL
SELECT '224', '333', '101'  FROM dual
UNION ALL
SELECT  '225', '111', '201' FROM dual
UNION ALL
SELECT '226', '555',  '201' FROM dual
UNION ALL
SELECT '227', '222', '301' FROM dual
UNION ALL
SELECT '228', '444', '501' FROM dual ) X
GROUP BY  X.COD_LIBRO )Y  ) );


No tengo los datos de las tablas por eso construyo los datos en duro, espero te ayude.

Luis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Registro mas repetido en una tabla ORACLE

Publicado por Rafael (178 intervenciones) el 15/01/2016 08:53:34
No se si lo que te han dicho te sirve pero el ejemplo simple podria ser con una consulta tal que asi:

1
2
3
4
5
6
7
8
9
10
select cod_libro
     , titulo
from   libros
where  cod_libro in ( select cod_libro
                      from   (select cod_libro
                                   , count(*) veces_prestado
                              from   prestamos
                              group  by cod_libro
                              order  by 2 desc)
                      where  rownum = 1)

Partiendo de este supuesto:
Imagen
SQL Fiddle
Espero te sirva.

Saludos

Pd. Si te sirve la informacion a mi me sirve un +1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Registro mas repetido en una tabla ORACLE

Publicado por Marbel (2 intervenciones) el 15/01/2016 13:43:20
SIIIII, soy lucia, bueno teniendo en cuenta eso.. de alli puedo hacer un update para cambiarle el nombre? porque la consulta que propones necesita el codigo del libro para mostrar el nombre. Entonces como harías el update?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar