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

[SOLUCIONADO] Uso de Group by y función max

Estas en el tema de Uso de Group by y función max en el foro de SQL Server en Foros del Web. Buenas a toda la gente de esta impresionante comunidad, Soy nuevo en sql y espero puedan ayudarme. Tengo los siquientes datos y deseo agruparlos y ...
  #1 (permalink)  
Antiguo 26/11/2014, 22:12
Avatar de anserk  
Fecha de Ingreso: noviembre-2014
Mensajes: 9
Antigüedad: 9 años, 4 meses
Puntos: 0
Pregunta Uso de Group by y función max

Buenas a toda la gente de esta impresionante comunidad, Soy nuevo en sql y espero puedan ayudarme.

Tengo los siquientes datos y deseo agruparlos y mostra el máximo

ID_ALUMNO --- Nombre --- Semestre --- Promedio
01 ----------- Juan ------ 1 ---------- 16.74
02 ----------- John ------ 1 ---------- 15.07
03 ----------- Pepe ----- 1 ---------- 14.32
04 ----------- Carlos ---- 1 ---------- 12.25
...

y lo que estoy buscando, es que me muestre un solo registro añadiendo también el "ID" y el "NOMBRE" al resultado

ID_ALUMNO --- Nombre --- Semestre --- Promedio
01 ----------- Juan ------ 1 ---------- 16.74

usé el siguiente código, pero no sé como puedo modificarlo o qué es lo que debo agregar para obtener el resultado que deseo

Código SQL:
Ver original
  1. SELECT cod_semestre, MAX(promedio) AS PROMEDIO_MÁXIMO FROM Alumno
  2. GROUP BY cod_semestre
  #2 (permalink)  
Antiguo 27/11/2014, 08:45
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, 8 meses
Puntos: 774
Respuesta: Uso de Group by y función max

Código SQL:
Ver original
  1. SELECT t1.* FROM alumno AS t1
  2. LEFT JOIN (SELECT cod_semestre, MAX(promedio) AS PROMEDIO_MÁXIMO FROM Alumno
  3. GROUP BY cod_semestre) AS t2 ON (t1.cod_semestre=t2.cod_semestre AND t1.semestre=t2.semestre)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 27/11/2014, 09:20
Avatar de anserk  
Fecha de Ingreso: noviembre-2014
Mensajes: 9
Antigüedad: 9 años, 4 meses
Puntos: 0
Pregunta Respuesta: Uso de Group by y función max

Gracias por la respuesta, pero no me funciona y eso debido a que escribí mal una parte del código, le añadí cod_semestre, cuando ese campo ni siquiera existe.

Código SQL:
Ver original
  1. SELECT semestre, MAX(promedio) FROM Alumno
  2. GROUP BY semestre

Última edición por anserk; 27/11/2014 a las 09:33 Razón: Corrección
  #4 (permalink)  
Antiguo 27/11/2014, 09:44
Avatar de anserk  
Fecha de Ingreso: noviembre-2014
Mensajes: 9
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Uso de Group by y función max

Muchas gracias!! por las respuesta y a todos los que se dieron el afán de mirar mi problema, ya lo tengo resuelto
  #5 (permalink)  
Antiguo 27/11/2014, 09:54
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, 8 meses
Puntos: 774
Respuesta: Uso de Group by y función max

solo por curiosidad como resolviste tu problema
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 27/11/2014, 10:00
Avatar de anserk  
Fecha de Ingreso: noviembre-2014
Mensajes: 9
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Uso de Group by y función max

Código SQL:
Ver original
  1. SELECT ID_Alumno, Nombre, semestre, Promedio FROM Alumno
  2. WHERE Promedio = (SELECT MAX(promedio) FROM Alumno WHERE semestre = 1)

pero ahora tengo un par de problemas más
Puedo seguir usando este hilo para hacer más preguntas?
  #7 (permalink)  
Antiguo 27/11/2014, 10:07
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, 8 meses
Puntos: 774
Respuesta: Uso de Group by y función max

si podrias seguir usando el hilo, si te fijas la solucion que te plantee es mas optima que tu codigo ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 27/11/2014, 10:19
Avatar de anserk  
Fecha de Ingreso: noviembre-2014
Mensajes: 9
Antigüedad: 9 años, 4 meses
Puntos: 0
Pregunta Respuesta: Uso de Group by y función max

Cita:
Iniciado por Libras Ver Mensaje
si podrias seguir usando el hilo, si te fijas la solucion que te plantee es mas optima que tu codigo ;)
Es solo que no pude hacer que ese código funcionara, debido a mis limitdos conocimientos sobre SQL...

ID_ALUMNO --- Nombre --- Semestre --- Promedio
01 ----------- Juan ------ 1 ---------- 16.74
02 ----------- John ------ 1 ---------- 15.07
03 ----------- Pepe ----- 1 ---------- 14.32
04 ----------- Carlos ---- 2 ---------- 12.29
05 ----------- Cesar ---- 2 ---------- 12.00
06 ----------- Cecilia ---- 2 ---------- 11.00

y si deseo mostrar el promedio máximo de los semestres 1 y 2 en una misma consulta, como puedo generar el código? obviamente mostrando sus datos.
  #9 (permalink)  
Antiguo 27/11/2014, 10:30
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, 8 meses
Puntos: 774
Respuesta: Uso de Group by y función max

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. id_alumno INT,
  4. nombre VARCHAR(20),
  5. semestre INT,
  6. promedio DECIMAL(16,10)
  7. )
  8.  
  9. INSERT INTO #temp VALUES (01 ,' Juan ', 1 , 16.74)
  10. INSERT INTO #temp VALUES (02 ,' John ', 1 , 15.07)
  11. INSERT INTO #temp VALUES (03 ,' Pepe',1 , 14.32)
  12. INSERT INTO #temp VALUES (04 ,' Carlos ', 2 , 12.29)
  13. INSERT INTO #temp VALUES (05 ,' Cesar ', 2 , 12.00)
  14. INSERT INTO #temp VALUES (06 ,' Cecilia ', 2 , 11.00)
  15.  
  16. SELECT t1.* FROM #temp AS t1
  17. LEFT JOIN (SELECT MAX(promedio) promedio,semestre FROM #temp GROUP BY semestre) AS t2 ON (t1.semestre=t2.semestre AND t1.promedio=t2.promedio)
  18. WHERE t2.promedio IS NOT NULL

te dije que con el codigo que te mande podias sacar los datos que necesitas..........
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 27/11/2014, 10:43
Avatar de anserk  
Fecha de Ingreso: noviembre-2014
Mensajes: 9
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Uso de Group by y función max

Ahora sí me funcionó, muchas gracias...
Perdón por seguir haciendo preguntas una duda más...
Y si también deseo mostrar los promedios mínimos de ambos semestres (1 y 2)?

Última edición por anserk; 27/11/2014 a las 10:44 Razón: Corrección
  #11 (permalink)  
Antiguo 27/11/2014, 11:14
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, 8 meses
Puntos: 774
Respuesta: Uso de Group by y función max

jugando un poco con los valores y las funciones de sql podemos sacar algo como esto:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. id_alumno INT,
  4. nombre VARCHAR(20),
  5. semestre INT,
  6. promedio DECIMAL(16,10)
  7. )
  8.  
  9. INSERT INTO #temp VALUES (01 ,' Juan ', 1 , 16.74)
  10. INSERT INTO #temp VALUES (02 ,' John ', 1 , 15.07)
  11. INSERT INTO #temp VALUES (03 ,' Pepe',1 , 14.32)
  12. INSERT INTO #temp VALUES (04 ,' Carlos ', 2 , 12.29)
  13. INSERT INTO #temp VALUES (05 ,' Cesar ', 2 , 12.00)
  14. INSERT INTO #temp VALUES (06 ,' Cecilia ', 2 , 11.00)
  15.  
  16. SELECT t1.* FROM #temp AS t1
  17. LEFT JOIN (SELECT MAX(promedio) promedio,semestre FROM #temp GROUP BY semestre
  18. UNION
  19. SELECT MIN(promedio) promedio,semestre FROM #temp GROUP BY semestre
  20. ) AS t2 ON (t1.semestre=t2.semestre AND t1.promedio=t2.promedio)
  21. WHERE t2.promedio IS NOT NULL
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 27/11/2014, 12:35
Avatar de anserk  
Fecha de Ingreso: noviembre-2014
Mensajes: 9
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Uso de Group by y función max

Eres grande!, gracias por tomarte las molestias de ayudarme, ahora sí lo tengo resuelto, el resto lo hago yo, sino no habría ningún sentido!!

Etiquetas: group, max, select, siguiente, sql
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 15:16.