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

[SOLUCIONADO] Como sumar carreras en beisbol

Estas en el tema de Como sumar carreras en beisbol en el foro de Mysql en Foros del Web. Hola amiguitos, estoy super trancada con una consulta a una de mis tablas, les cuento: Los equipos de beisbol a veces juegan como home_club y ...
  #1 (permalink)  
Antiguo 04/05/2018, 01:08
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 11 meses
Puntos: 11
Sonrisa Como sumar carreras en beisbol

Hola amiguitos, estoy super trancada con una consulta a una de mis tablas, les cuento:
Los equipos de beisbol a veces juegan como home_club y otras veces como visitantes.
Para ello tengo en una tabla las jornadas diarias de juegos y allí guardo la cantidad de carreras hechas tanto en calidad de home_club como visitantes, de la siguiente manera:
Código MySQL:
Ver original
  1. +------------+------------+--------+--------+-------+-------------------+-------------------+
  2. |  jornada   | id_team_homeclub | id_team_visitante | carreras_homeclub | carreras_visitante|
  3. +------------+------------+--------+--------+-------+-------------------+-------------------+
  4. | 2018-01-06 |      TEAM_1      |      team_2      |          5         |             2      |
  5. | 2018-01-07 |      TEAM_1      |      team_3      |          4         |             7      |
  6. | 2018-01-08 |      TEAM_1      |      team_4      |          1         |             0      |
  7. | 2018-01-09 |      team_2      |      TEAM_1      |          0         |             1      |
  8. | 2018-01-10 |      team_2      |      team_3      |          5         |             6      |
  9. | 2018-01-11 |      team_2      |      team_4      |          1         |             1      |
  10. | 2018-01-12 |      team_3      |      TEAM_1      |          2         |             3      |
  11. | 2018-01-13 |      team_3      |      team_2      |          1         |             3      |
  12. | 2018-01-14 |      team_3      |      team_4      |          2         |             4      |
  13. | 2018-01-15 |      team_4      |      TEAM_1      |          1         |             1      |
  14. | 2018-01-16 |      team_4      |      team_2      |          3         |             1      |
  15. | 2018-01-17 |      team_4      |      team_3      |          2         |             2      |
  16. +------------+------------+--------+--------+-------+-------------------+-------------------+
Ahora deseo saber para un equipo específico (por ejemplo el team_1), el total de carreras que hizo en toda la temporada (como local y visitante), algo así como:
Código MySQL:
Ver original
  1. +-----------+-----------------------+--------------------+-------------+
  2. |   Equipo   |subtotal_homeclub   | subtotal_visitante |     carrerastotales
  3. +-----------+-----------------+-----------------+----------------------+
  4. |   team_1  |           10        |          5         |        15
  5. +-----------+-----------------+-----------------+----------------------+
Les cuento que lo he logrado exitosamente con la siguiente consulta, pero quiero saber si esta bien así con los SELECT anidados o si existe otra forma mejor de hacer la consulta
Código PHP:
Ver original
  1. SELECT subtotal_homeclub, subtotal_visitante, (subtotal_homeclub + subtotal_visitante) AS carrerastotales
  2.     FROM (SELECT SUM(carreras_homeclub) AS subtotal_homeclub FROM `jornadas` WHERE (id_team_homeclub  = '1')) AS homeclub
  3. INNER JOIN
  4.     (SELECT SUM(carreras_visitante) AS subtotal_visitante FROM `jornadas` WHERE (id_team_visitante = '1')) AS visitante

Última edición por julia2021; 04/05/2018 a las 01:46
  #2 (permalink)  
Antiguo 04/05/2018, 02:36
 
Fecha de Ingreso: mayo-2011
Ubicación: Palma de Mallorca
Mensajes: 108
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Como sumar carreras en beisbol

Hola julia2021

yo simplemente quitaría los paréntesis dentro de las subconsultas después del WHERE, por que realmente no le hacen falta ya que cada subconsulta ya está encapsulada con su propio paréntesis y no hay confusión y también añadiría el nombre del equipo a la consulta:

Código MySQL:
Ver original
  1. SELECT nombre_equipo subtotal_homeclub, subtotal_visitante, (subtotal_homeclub + subtotal_visitante) AS carrerastotales
  2.     FROM equipos (SELECT SUM(carreras_homeclub) AS subtotal_homeclub FROM `jornadas` WHERE id_team_homeclub  = '1') AS homeclub
  3.     (SELECT SUM(carreras_visitante) AS subtotal_visitante FROM `jornadas` WHERE id_team_visitante = '1') AS visitante
  4. WHERE id_equipo = '1'
  #3 (permalink)  
Antiguo 04/05/2018, 07:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Como sumar carreras en beisbol

NO se podria hacer con un case:


Código MySQL:
Ver original
  1. case when  id_team_homeclub  = '1' then sum(carreras_homeclub) end as homeclub,
  2. case when  id_team_visitante = '1'  = '1' then sum(carreras_visitante) end as visitante
  3. from `jornadas`

ahora cual es el campo que une equipos con jornadas?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 04/05/2018, 08:13
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 11 meses
Puntos: 11
Respuesta: Como sumar carreras en beisbol

Libras, gracias pero lo he probado y así no funciona porque se trae toda la suma, y tendría que colocar un GROUP BY id_team_homeclub o GROUP BY id_team_visitante pero necesito los dos valores
  #5 (permalink)  
Antiguo 04/05/2018, 08:13
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 11 meses
Puntos: 11
Respuesta: Como sumar carreras en beisbol

Gracias @tonigomila1988 , así lo haré.
  #6 (permalink)  
Antiguo 04/05/2018, 14:40
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Como sumar carreras en beisbol

Hola Julia 2021:

En realidad, lo que propone el compañero Libras, también se puede hacer, aunque hay un pequeño detalle con la consulta y es que el SUM debería de ir fuera del CASE-WHEN y hay que agregar una condición WHERE para filtrar los datos

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------------+------------------+-------------------+-------------------+--------------------+
  3. | jornada    | id_team_homeclub | id_team_visitante | carreras_homeclub | carreras_visitante |
  4. +------------+------------------+-------------------+-------------------+--------------------+
  5. | 2018-01-06 | TEAM_1           | team_2            |                 5 |                  2 |
  6. | 2018-01-07 | TEAM_1           | team_3            |                 4 |                  7 |
  7. | 2018-01-08 | TEAM_1           | team_4            |                 1 |                  0 |
  8. | 2018-01-09 | team_2           | TEAM_1            |                 0 |                  1 |
  9. | 2018-01-10 | team_2           | team_3            |                 5 |                  6 |
  10. | 2018-01-11 | team_2           | team_4            |                 1 |                  1 |
  11. | 2018-01-12 | team_3           | TEAM_1            |                 2 |                  3 |
  12. | 2018-01-13 | team_3           | team_2            |                 1 |                  3 |
  13. | 2018-01-14 | team_3           | team_4            |                 2 |                  4 |
  14. | 2018-01-15 | team_4           | TEAM_1            |                 1 |                  1 |
  15. | 2018-01-16 | team_4           | team_2            |                 3 |                  1 |
  16. | 2018-01-17 | team_4           | team_3            |                 2 |                  2 |
  17. +------------+------------------+-------------------+-------------------+--------------------+
  18. 12 rows in set (0.00 sec)
  19.  
  20. mysql>  SELECT
  21.     -> SUM(CASE WHEN  id_team_homeclub  = 'TEAM_1'
  22.     ->     THEN carreras_homeclub  ELSE 0 END) AS homeclub,
  23.     -> SUM(CASE WHEN  id_team_visitante = 'TEAM_1'
  24.     ->     THEN carreras_visitante ELSE 0 END) AS visitante
  25.     -> FROM tabla
  26.     -> WHERE    id_team_homeclub = 'TEAM_1'
  27.     ->       OR id_team_visitante = 'TEAM_1';
  28. +----------+-----------+
  29. | homeclub | visitante |
  30. +----------+-----------+
  31. |       10 |         5 |
  32. +----------+-----------+
  33. 1 row in set (0.00 sec)

Como verás, en realidad no hay necesidad de hacer agrupación, ya que estás filtrando en el WHERE. Haz la prueba y nos comentas.

Saludos
Leo.
  #7 (permalink)  
Antiguo 06/05/2018, 16:58
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 11 meses
Puntos: 11
Respuesta: Como sumar carreras en beisbol

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola Julia 2021:

En realidad, lo que propone el compañero Libras, también se puede hacer, aunque hay un pequeño detalle con la consulta y es que el SUM debería de ir fuera del CASE-WHEN y hay que agregar una condición WHERE para filtrar los datos

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------------+------------------+-------------------+-------------------+--------------------+
  3. | jornada    | id_team_homeclub | id_team_visitante | carreras_homeclub | carreras_visitante |
  4. +------------+------------------+-------------------+-------------------+--------------------+
  5. | 2018-01-06 | TEAM_1           | team_2            |                 5 |                  2 |
  6. | 2018-01-07 | TEAM_1           | team_3            |                 4 |                  7 |
  7. | 2018-01-08 | TEAM_1           | team_4            |                 1 |                  0 |
  8. | 2018-01-09 | team_2           | TEAM_1            |                 0 |                  1 |
  9. | 2018-01-10 | team_2           | team_3            |                 5 |                  6 |
  10. | 2018-01-11 | team_2           | team_4            |                 1 |                  1 |
  11. | 2018-01-12 | team_3           | TEAM_1            |                 2 |                  3 |
  12. | 2018-01-13 | team_3           | team_2            |                 1 |                  3 |
  13. | 2018-01-14 | team_3           | team_4            |                 2 |                  4 |
  14. | 2018-01-15 | team_4           | TEAM_1            |                 1 |                  1 |
  15. | 2018-01-16 | team_4           | team_2            |                 3 |                  1 |
  16. | 2018-01-17 | team_4           | team_3            |                 2 |                  2 |
  17. +------------+------------------+-------------------+-------------------+--------------------+
  18. 12 rows in set (0.00 sec)
  19.  
  20. mysql>  SELECT
  21.     -> SUM(CASE WHEN  id_team_homeclub  = 'TEAM_1'
  22.     ->     THEN carreras_homeclub  ELSE 0 END) AS homeclub,
  23.     -> SUM(CASE WHEN  id_team_visitante = 'TEAM_1'
  24.     ->     THEN carreras_visitante ELSE 0 END) AS visitante
  25.     -> FROM tabla
  26.     -> WHERE    id_team_homeclub = 'TEAM_1'
  27.     ->       OR id_team_visitante = 'TEAM_1';
  28. +----------+-----------+
  29. | homeclub | visitante |
  30. +----------+-----------+
  31. |       10 |         5 |
  32. +----------+-----------+
  33. 1 row in set (0.00 sec)

Como verás, en realidad no hay necesidad de hacer agrupación, ya que estás filtrando en el WHERE. Haz la prueba y nos comentas.

Saludos
Leo.
Perfecto, amigo @leonardo_josue, he probado lo que me indicas y tambien funciona. Una nueva forma de verlo. Mil Gracias

Etiquetas: count
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 11:40.