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/