none
Sumar dos querys distintos RRS feed

  • Pregunta

  • Hola a todos de antemano muchas gracias por su tiempo.

    Estoy creando una pequeña aplicación que muestre la tabla general de un torneo de fútbol soccer partiendo de los resultados de los partidos y estoy utilizando mysql para la base de datos, me gustaria saber si es posible sumas dos querys distintos en una misma consulta.

    Con este query obtengo los goles de local

    SELECT numgolesLocal FROM partido WHERE equipoLocal=idEquipo;

    Y con este los goles de visitante

    SELECT numgolesVisitante FROM partido WHERE equipoVisitante=idEquipo;

    ¿como puedo sumar los datos obtenidos de estos 2 querys?

    Intente hacerlo de la siguente manera, pero asi obtengo una columna que me muestra los goles de local y de visitante, pero no se como hacer la suma.

    select SUM(numGolesLocal)  as goles FROM PARTIDO WHERE equipoLocal=1 UNION ALL select SUM(numGolesVisitante) FROM PARTIDO WHERE equipoVisitante=1;

    ejemplo:

    goles

    9

    5



    Nunca te rindas

    jueves, 12 de diciembre de 2013 6:22

Respuestas

  • Hola:

    Otra solución podría ser:

    SELECT  SUM(
                CASE WHEN EquipoLocal = 1 
                     THEN numGolesLocal
                     ELSE numGolesVisitante
                END ) As TotalGoles
    FROM Partido
    WHERE  EquipoLocal = 1 OR EquipoVisitante = 1
    

    Y si Equipolocal y EquipoVisitante son valores 1 ó 0, podría ser:

    SELECT SUM(numGolesLocal * EquipoLocal + numGolesVisitante * EquipoVisitante) FROM Partido

    WHERE  EquipoLocal = 1 OR EquipoVisitante = 1

    Saludos


    • Editado LG DES jueves, 12 de diciembre de 2013 10:40
    • Propuesto como respuesta HunchbackMVP jueves, 12 de diciembre de 2013 15:31
    • Marcado como respuesta Omar Ortiz jueves, 12 de diciembre de 2013 16:15
    jueves, 12 de diciembre de 2013 8:28

Todas las respuestas

  • Una forma de conseguirlo es hacer primero el UNION y luego el SUM. Puedes conseguirlo con una CTE:

    WITH cte AS

        (

        SELECT numgolesLocal AS g FROM partido WHERE equipoLocal=idEquipo

        UNION ALL

        SELECT numgolesVisitante AS g FROM partido WHERE equipoVisitante=idEquipo

        )

    SELECT SUM(g) AS Goles From cte

    jueves, 12 de diciembre de 2013 6:57
  • Hola:

    Otra solución podría ser:

    SELECT  SUM(
                CASE WHEN EquipoLocal = 1 
                     THEN numGolesLocal
                     ELSE numGolesVisitante
                END ) As TotalGoles
    FROM Partido
    WHERE  EquipoLocal = 1 OR EquipoVisitante = 1
    

    Y si Equipolocal y EquipoVisitante son valores 1 ó 0, podría ser:

    SELECT SUM(numGolesLocal * EquipoLocal + numGolesVisitante * EquipoVisitante) FROM Partido

    WHERE  EquipoLocal = 1 OR EquipoVisitante = 1

    Saludos


    • Editado LG DES jueves, 12 de diciembre de 2013 10:40
    • Propuesto como respuesta HunchbackMVP jueves, 12 de diciembre de 2013 15:31
    • Marcado como respuesta Omar Ortiz jueves, 12 de diciembre de 2013 16:15
    jueves, 12 de diciembre de 2013 8:28
  • Hola

    Espero que las soluciones que te han proporcionado sean capaces de resolver tu consulta, de lo contrario te pido de favor desmarques la respuesta y nos lo hagas saber, esto se hace para tener un mayor control sobre los foros.

    Saludos


    <EL CONTENIDO SE PROVEE "COMO ES" SIN GARANTÍA DE NINGÚN TIPO, ASÍ SEA EXPRESA O IMPLÍCITA>
     
    Gracias
     
    MSDN/TechNet Soporte Comunidades
     
    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema.
    Es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    jueves, 12 de diciembre de 2013 16:16
  • Gracias por tu ayuda me funciono perfectamente esta opción:

    SELECT  SUM(
                CASE WHEN EquipoLocal = 1 
                     THEN numGolesLocal
                     ELSE numGolesVisitante
                END ) As TotalGoles
    FROM Partido
    WHERE  EquipoLocal = 1 OR EquipoVisitante = 1

    Te agradecería mucho si me pudieras explicar como funciona esta consulta, ya que tengo otros querys similares y me gustaría adaptarlos a esta consulta. De antemano muchas gracias.


    Nunca te rindas


    jueves, 12 de diciembre de 2013 22:10
  • Hola:

    Es bastante sencilla, lo único es el CASE que seria como un IF(), consulta la ayuda del CASE, no se como explicarlo, sería como:

    SELECT

       SUM( IF(EquipoLocal=1, numGolesLocal, numGolesVisitante) )

    FROM Partido

    WHERE <Condicion para TODOS los registros> EquipoLocal = 1 OR EquipoVisitante = 1

    Saludos

    viernes, 13 de diciembre de 2013 15:10
  • Muchas gracias por responder, me quedo un poco mas claro, ya podemos dar por cerrado el tema, saludos y nuevamente gracias.

    Nunca te rindas


    viernes, 13 de diciembre de 2013 20:58