Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Consulta de totales - Max

Estas en el tema de Consulta de totales - Max en el foro de Bases de Datos General en Foros del Web. Buenos días, Quisiera hacer una pregunta acerca de una consulta de totales, llevo tiempo dándole vueltas y no veo cómo hacerlo. Voy a emplear un ...
  #1 (permalink)  
Antiguo 13/03/2011, 02:25
 
Fecha de Ingreso: marzo-2011
Mensajes: 2
Antigüedad: 13 años, 1 mes
Puntos: 0
Consulta de totales - Max

Buenos días,

Quisiera hacer una pregunta acerca de una consulta de totales, llevo tiempo dándole vueltas y no veo cómo hacerlo. Voy a emplear un ejemplo sencillo para ilustrarlo:

Supongamos que tengo una tabla con las calificaciones de unos alumnos, esta tabla tiene solo dos campos: nombre (del alumno) y calificación. Lo que trato de conseguir es que la consulta me devuelva únicamente el nombre y la calificación del alumno con la máxima nota: en el campo nombre pongo "agrupar por" y en el campo calificación pongo "max", pero no me aparecen las calificaciones de todos los alumnos (en lugar del nombre y calificación del de mayor nota).

Si alguien supiera darme alguna orientación le estaría infinitamente agradecido.

Gracias de antemano y saludos,
  #2 (permalink)  
Antiguo 14/03/2011, 08:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Consulta de totales - Max

En sql server :)

select top 1 calif,nombre_alumno from
(
select sum(calificaciones) calif, nombre_alumno from tabla group by calificaciones,nombre
) t1



Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 14/03/2011, 09:05
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.
  #4 (permalink)  
Antiguo 14/03/2011, 10:11
 
Fecha de Ingreso: marzo-2011
Mensajes: 2
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Consulta de totales - Max

uy... os pido perdón, no sabía que este foro era sobre programación, la verdad es que no sé programar.

de todas maneras, os doy las gracias por la rapidez y la amabildad con la que me habéis contestado.

disculpad las molestias.
  #5 (permalink)  
Antiguo 14/03/2011, 10:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta de totales - Max

¿Programación?
NO. Este es el foro de Bases de Datos. Se trata de SQL y BBDD en general, no programación. Nada de lo que leonardo_josue o Libras te han puesto tiene que ver con programación, sino con SQL...

¿?¿?¿?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: max, totales, bases-de-datos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:21.