Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/08/2008, 12:13
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 10 meses
Puntos: 300
Respuesta: Sentencia SQL dificil ayuda.

Yo te hago una propuesta MySQL algo más compleja, quizás, porque tiene en cuenta la posibilidad de que dos personas hayan tomado prestados el mismo número de libros, y en ese caso te muestra los dos:

Cita:
SELECT l.nombre, l.apellidos, l.numtarjeta, p.ISBN, p.Idsucursal, p.fechainicio, p.fechadevolucion
FROM lector l
INNER JOIN prestamo p ON p.numtarjeta = l.numtarjeta
WHERE l.numtarjeta
IN (
SELECT l.numtarjeta
FROM lector l
INNER JOIN prestamo p ON l.numtarjeta = p.numtarjeta para el caso de que haya más de un numtarjeta
GROUP BY p.numtarjeta
HAVING count( p.numtarjeta ) = (
SELECT count( * ) AS prestamos
FROM prestamo p2
GROUP BY p2.numtarjeta
ORDER BY prestamos DESC
LIMIT 1 )
)
ORDER BY l.numtarjeta
Te explicaré algo la sintaxis, y lo haré por partes, en el orden en que lo estructuré:
1) en primer lugar, saco el número máximo de libros prestado a una persona
SELECT count( * ) AS prestamos
FROM prestamo p2
GROUP BY p2.numtarjeta
ORDER BY prestamos DESC
LIMIT 1

2) luego, busco todos los números de tarjeta cuyo total de préstamos sea ese:
SELECT l.numtarjeta
FROM lector l
INNER JOIN prestamo p ON l.numtarjeta = p.numtarjeta
GROUP BY p.numtarjeta
HAVING count( p.numtarjeta ) = (
SELECT count( * ) AS prestamos
FROM prestamo p2
GROUP BY p2.numtarjeta
ORDER BY prestamos DESC
LIMIT 1 )
)

3) Posteriormente, me traigo todos los datos de las personas cuyo número de tarifa está entre esos:
SELECT l.nombre, l.apellidos, l.numtarjeta, p.ISBN, p.Idsucursal, p.fechainicio, p.fechadevolucion
FROM lector l
INNER JOIN prestamo p ON p.numtarjeta = l.numtarjeta
WHERE l.numtarjeta
IN

4) y, finalmente, ordeno todo eso por numtarjeta
ORDER BY l.numtarjeta

Si usas una versión reciente de MySQL no creo que tengas problema con la subconsulta. Pruébalo y dínoslo.

Seguro que hay otras posibilidades. Recuerdo que Quimfv resolvió un problema como este de MAX(count) seguramente con una sintaxis más eficiente. Está aquí: http://www.forosdelweb.com/f86/como-...repita-579381/

Última edición por jurena; 21/08/2008 a las 02:38