Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/03/2011, 09:05
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta de totales - Max

Hola ignaro:

Si entendí bien en tu tabla tienes lo siguiente:

Código:
nombre|calificacion
---------------------------
jose|7
luis|10
juan|8
felipe|9
paco|6
Por lo tanto Luis es quien tiene la máxima calificación. Esto podría obtenerlo así:

Código SQL:
Ver original
  1. SELECT T1.* FROM TuTabla T1
  2. INNER JOIN (SELECT MAX(calificacion) max_calificacion FROM TuTabla) T2
  3. ON T1.calificacion = T2.max_calificacion

Para el ejemplo estoy considerando que cada alumno tiene solamente una calificación. Si fuera el caso de que cada alumno tuviera más de una calificación entonces deberías utilizar la función AVG para obtener el máximo promedio por alumno.

El código que pone el compañero Libra tiene varios detalles:

1. No debes poner en el GROUP BY la calificación, sólo debes agrupar por nombre
2. Si en tu select pones el campo nombre_alumno, entonces en el group by debe aparecer exactamente igual (ahí lo pones como nombre).
3. Para que funcione el TOP 1, DEBES ORDENAR por el campo CALIF de manera descendente, para asegurar que el mayor registro se ubique en la primer posición.
4. No estás considerando que puede haber más de un alumno con la máxima calificación, pero bueno, eso depende de la lógica de negocio.

Si quieres utilizar la consulta que propone Libra tendría que ser más o menos así:

Código SQL:
Ver original
  1. SELECT top 1 * FROM
  2. (
  3. SELECT nombre, SUM(calificacion) calificacion FROM TuTabla GROUP BY nombre
  4. ) t1 ORDER BY 1 DESC

Tal y como hace la observación en su post esta es una sintáxis exclusiva de SQL Server. Si utilizas un manejador diferente deberías de hacer algunas adecuaciones. La consulta que yo pongo debería de funcionar para la mayoría de los manejadores de BD

Haz la prueba con ambas consultas y nos comentas los resultados.

Saludos
Leo.