SQL - procedimiento que muestre los libros mas prestados y los nombres de los socios

 
Vista:

procedimiento que muestre los libros mas prestados y los nombres de los socios

Publicado por jlx (2 intervenciones) el 14/05/2018 02:38:44
Necesito un procedimiento que muestre los libros mas prestados y los nombres de los socios de esta tabla

Socio(codigo,apellido_nombre,direccion,telefono,fecha_alt)
Libro(codigo,titulo_libro,tema)
Prestamos(codigoSocio,codigoLibro)
Como tendría que hacerlo? supongo que en una vista, pero no se como hacerlo para ordenador por el numero de aparición y ya con una repetitiva controlar los 5
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

procedimiento que muestre los libros mas prestados y los nombres de los socios

Publicado por Isaias (1921 intervenciones) el 15/05/2018 17:05:33
¿En que motor de base de datos?, ¿Que avance llevas?
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

procedimiento que muestre los libros mas prestados y los nombres de los socios

Publicado por elmo (1 intervención) el 16/05/2023 13:47:03
buenas tardes desde cabo verde
el motor es de toyota, y el avance sabe dios
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

procedimiento que muestre los libros mas prestados y los nombres de los socios

Publicado por Hol (1 intervención) el 16/05/2023 14:26:34
Hum, no conozco “toyota”…

Pero el SQL es un estándar y no debe ser muy alejado de algo como esto:

Inicialmente tienes que partir de la estructura de préstamos, de ésta obtienes el codigoSocio y codigoLibro con esos dos datos haces join para obtener nombre de libro y nombre del socio hacia libro y socio respectivamente y así obtener nombres de cada uno.

Entonces ese query te debería quedar parecido a esto:

SELECT T.titulo, S.apellido_nombre
FROM Prestamos P
INNER JOIN Socio S ON S.codigoSocio = P.codigoSocio
INNER JOIN Titulo S ON S.codigoLibro = P. codigoLibro

El SQL anterior te muestra nombres de cada uno de los pŕestamos implicados, falta aún los libros más prestados, pienso que al enunciado le falta decir cuántos, porque así quedaría una consulta muy pesada que podría devolver mucho registro, pero es solo agregar un agrupamiento.

Sin embargo, en todo esto hay una observación grande, y es que normalmente en los sistemas bibliotecarios, una vez que se hace efectiva la devolución de un libro, ese registro se elimina de esa estructura, pero se almacena en un histórico, donde queda todo el historial que ha tenido ese libro durante un tiempo determinado, pues de lógica la tabla de préstamos solo contiene los préstamos vigentes, y que solo admite una relación uno a uno respecto al libro, es decir yo solo puedo tener referenciado un código de libro, una y solamente una vez en esa tabla de préstamos, que puede haber varios ejemplares de un mismo libro, sí, pero con código único para cada ejemplar por supuesto.

Solo es agregar al query un Count(*) y agrupar por el titulo (Group By T.titulo), pero repito eso debería hacerse contra un histórico y limitar con cierta cantidad de registros, mostrar por periodos de tiempo por ejemplo durante el último mes.
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
sin imagen de perfil

procedimiento que muestre los libros mas prestados y los nombres de los socios

Publicado por Darío (5 intervenciones) el 17/05/2023 16:05:56
Buenos dias, la consulta SQL para ordenar ese pedido seria la siguiente:

Select L.Titulo_Libro, S.Nombre, Count (*) as Cantidad_Prestada
From Socios S, Libros L, Prestamos P
Where P.CodigoSocio = S.Codigo
And P.CodigoLibro = L.Codigo
Group by L.Titulo_Libro, S.Nombre
Order by Count (*) desc

Espero sea lo que necesitas.
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