none
Duda En Agrupación RRS feed

  • Pregunta

  • Buena tarde.

    Verán tengo una consulta parecida a esto

    SELECT SUM(t1.campo2)AS Total,t2.campo4 FROM NAME_TABLE1 t1

    INNER JOIN NAME_TABLE2 t2 ON t1.campo1 = t2.campo1

    GROUP BY t2.campo4

    Ahora bien, el problema que tengo es que la columna de total me devuelve un valor elevado; explico, hacienda las consultas aparte:

    SELECT SUM(t1.campo2)AS Total FROM NAME_TABLE1 WHERE t1.campo1 = ‘XXXXZ’, obtengo un resultado de 25, y con SELECT *FROM NAME_TABLE2 t2 WHERE t2.campo1 = ‘XXXXZ’, obtengo un total de 15 filas afectadas; por lo que al hacer la consulta con el inner me devuelve 375 (la multiplicación de 25 * 15 por así decirlo).

    Pregunto: como puedo agrupar para obtener 25 de resultado???

    miércoles, 16 de diciembre de 2015 22:19

Respuestas

  • Lo que te está pasando es que el campo1 que estas usando para hacer join no identifica las filas 1-1, sino que para cada una de la izquieerda te devuelve muchas de la derecha.

    Si te hace el producto cartesiano es decir ese 375, muchas veces es porque nos equivocamos en el alias y ponemos algo como on t1.campo1=t1.campo1 que siempre es cierto por lo que se hace ese producto cartesiano.

    Espero haberme explicado, básicamente repasa la condición de unión de las dos tablas antes de hacer la suma, una vez que eso esté bien, lo demás es tal como lo haces.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 17 de diciembre de 2015 8:08
    Moderador
  • Miguel explico el por que del resultado, yo solo voy a recomendar una solucion.

    Deberas hacer la agrupacion / agregacion en el lado de muchos en la relacion y luego hacer la union. Des esta forma fuerzas que la relacion en ambos conjuntos sea 1-1 o 1-0/1.

    with R1 as (
    select campo1, sum(campo2) as sum_t1_campo2
    from name_table1
    group by campo1
    )
    select t2.campo4, sum(t1.sum_t1_campo2) as total
    from R1 as t1 inner join name_table2 as t2 on t2.campo1 = t1.campo1
    groupby t2.campo4;

    Si existen muchos filas por la columna [campo1] en ambas tablas entonces tendras que agrupar ambas tablas y luego unir.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    jueves, 17 de diciembre de 2015 14:06

Todas las respuestas

  • Lo que te está pasando es que el campo1 que estas usando para hacer join no identifica las filas 1-1, sino que para cada una de la izquieerda te devuelve muchas de la derecha.

    Si te hace el producto cartesiano es decir ese 375, muchas veces es porque nos equivocamos en el alias y ponemos algo como on t1.campo1=t1.campo1 que siempre es cierto por lo que se hace ese producto cartesiano.

    Espero haberme explicado, básicamente repasa la condición de unión de las dos tablas antes de hacer la suma, una vez que eso esté bien, lo demás es tal como lo haces.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 17 de diciembre de 2015 8:08
    Moderador
  • Miguel explico el por que del resultado, yo solo voy a recomendar una solucion.

    Deberas hacer la agrupacion / agregacion en el lado de muchos en la relacion y luego hacer la union. Des esta forma fuerzas que la relacion en ambos conjuntos sea 1-1 o 1-0/1.

    with R1 as (
    select campo1, sum(campo2) as sum_t1_campo2
    from name_table1
    group by campo1
    )
    select t2.campo4, sum(t1.sum_t1_campo2) as total
    from R1 as t1 inner join name_table2 as t2 on t2.campo1 = t1.campo1
    groupby t2.campo4;

    Si existen muchos filas por la columna [campo1] en ambas tablas entonces tendras que agrupar ambas tablas y luego unir.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    jueves, 17 de diciembre de 2015 14:06
  • Muchas Gracias.
    jueves, 17 de diciembre de 2015 19:18