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

subconsulta con max y avg

Estas en el tema de subconsulta con max y avg en el foro de Mysql en Foros del Web. Hola . Tengo la siguiente consulta que no logro la sintaxis para que me devuelva la media de la columna puntaje donde tendría que agruparse ...
  #1 (permalink)  
Antiguo 31/07/2017, 08:06
Avatar de flashmax  
Fecha de Ingreso: julio-2012
Ubicación: Bs.As. Argentina
Mensajes: 507
Antigüedad: 11 años, 8 meses
Puntos: 86
subconsulta con max y avg

Hola . Tengo la siguiente consulta que no logro la sintaxis para que me devuelva la media de la columna puntaje donde tendría que agruparse la id_prueba y el id_participante
Código SQL:
Ver original
  1. sistema de votación 5 jueces
  2. tabla > votos
  3. +-------+---------+---------------+---------+-------+
  4. |id_voto|id_jurado|id_participante|id_prueba|puntaje|
  5. +-------+---------+---------------+---------+-------+
  6. |1      |1        |3              |1        |30     |
  7. |2      |4        |3              |1        |23     |
  8. |3      |8        |3              |1        |20     |
  9. |4      |12       |3              |1        |22     |
  10. |5      |9        |3              |1        |24     |
  11. |6      |1        |40             |1        |21     |
  12. |7      |4        |40             |1        |20     |
  13. |9      |8        |40             |1        |23     |
  14. |10     |12       |40             |1        |20     |
  15. |11     |9        |40             |1        |30     |
  16. +-------+---------+---------------+---------+-------+

Código MySQL:
Ver original
  1. v.id_jurado AS ID_JURADO,
  2. v.puntaje AS MAYOR,
  3. v.id_participante AS ESPEJO,
  4. CONCAT(participantes.apellido_participante, ' ', participantes.nombre_participante) AS PARTICIPANTE,
  5. CONCAT(jurados.apellido_jurado, ' ', jurados.nombre_jurado) AS JURADO,
  6. jurados.lugar_jurado AS PAIS,
  7. participantes.lugar_participante AS LUGAR,
  8. v.id_prueba AS PRUEBA,
  9. AVG(puntaje)AS MEDIA
  10. FROM votos AS v
  11. INNER JOIN participantes ON v.id_participante = participantes.espejo
  12. INNER JOIN jurados ON v.id_jurado = jurados.id_jurado
  13. WHERE (v.puntaje = (SELECT MAX(puntaje)FROM votos))


RESULTADO
Código HTML:
Ver original
  1. ESPEJO 3
  2. PARTICIPANTE ALONZO  JOSE
  3. LUGAR UPU
  4. ID JURADO 15
  5. JURADO GOMEZ JOSE
  6. PAIS ARGENTINA
  7. PRUEBA 1
  8. PUNTAJE 119
  9. MAYOR 30
  10. PROMEDIO 30.0------> TENDRIA QUE DEVOLVER 23,8
__________________
Saludos!
----------------------------------------------------------

Última edición por flashmax; 31/07/2017 a las 12:27
  #2 (permalink)  
Antiguo 31/07/2017, 12:55
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: subconsulta con max y avg

Hola flashmax:

Cuando pongas alguna consulta de ejemplo, debes postear también la estructura de todas las tablas que intervengan, de lo contrario es complicado tratar de entender de donde diablos salen los resultados que pones... En tu caso, no nos dices cómo es la estructura de tus tablas PARTICIPANTES y JURADOS, ni pones datos de ejemplo, por lo tanto no podemos reproducir fielmente la consulta. Ojo con eso.

ahora, en tu consulta estás utilizando la función de agrupación AVG, pero no estás AGRUPANDO, por lo tanto, el promedio se hará sobre todos los registros existentes en la tabla... si entendí bien lo que quieres y usando sólo los datos de la tabla que pones, sería algo así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM votos;
  2. +---------+-----------+-----------------+-----------+---------+
  3. | id_voto | id_jurado | id_participante | id_prueba | puntaje |
  4. +---------+-----------+-----------------+-----------+---------+
  5. |       1 |         1 |               3 |         1 |      30 |
  6. |       2 |         4 |               3 |         1 |      23 |
  7. |       3 |         8 |               3 |         1 |      20 |
  8. |       4 |        12 |               3 |         1 |      22 |
  9. |       5 |         9 |               3 |         1 |      24 |
  10. |       6 |         1 |              40 |         1 |      21 |
  11. |       7 |         4 |              40 |         1 |      20 |
  12. |       9 |         8 |              40 |         1 |      23 |
  13. |      10 |        12 |              40 |         1 |      20 |
  14. |      11 |         9 |              40 |         1 |      30 |
  15. +---------+-----------+-----------------+-----------+---------+
  16. 10 rows in set (0.03 sec)
  17.  
  18. mysql> SELECT
  19.     ->   id_participante,
  20.     ->   id_prueba,
  21.     ->   AVG(puntaje) AS MEDIA
  22.     -> FROM
  23.     ->   votos
  24.     -> GROUP BY
  25.     ->   id_participante,
  26.     ->   id_prueba;
  27. +-----------------+-----------+---------+
  28. | id_participante | id_prueba | MEDIA   |
  29. +-----------------+-----------+---------+
  30. |               3 |         1 | 23.8000 |
  31. |              40 |         1 | 22.8000 |
  32. +-----------------+-----------+---------+
  33. 2 rows in set (0.00 sec)

Si esto no te sirva, postea los datos que faltan y con gusto te tratamos de ayudar.

Saludos
Leo.
  #3 (permalink)  
Antiguo 01/08/2017, 15:00
Avatar de flashmax  
Fecha de Ingreso: julio-2012
Ubicación: Bs.As. Argentina
Mensajes: 507
Antigüedad: 11 años, 8 meses
Puntos: 86
Respuesta: subconsulta con max y avg

Hola gracias por ayudarme tu consulta esta bien pero si le agrego id_jurado y max(puntaje) para saber que jurado dio ese mayor puntaje me lo repite, mira.
Tendría que respetar el id_jurado con el mayor puntaje por ese motivo estuve probando subconsultas !
Código SQL:
Ver original
  1. SELECT
  2. id_jurado,
  3. id_participante,
  4. id_prueba,
  5. AVG(puntaje) AS MEDIA,
  6. MAX(puntaje) AS MAYOR_PUNTAJE_DADO
  7. FROM
  8. votos
  9. GROUP BY
  10. id_participante,
  11. id_prueba

Cita:
db.sql
https://drive.google.com/file/d/0B8g8L53Gir2HZS1uWnd5dkVEMHM/view?usp=sharing

la consulta que quiero es : que el mayor puntaje dado por el id_jurado al id_participante en la Id_prueba "1"
__________________
Saludos!
----------------------------------------------------------

Etiquetas: agrupar, avg, max, select, subconsulta, tabla
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 17:43.