Combinar dos consultas MySQL que funcionan bien por separado

Combinar dos consultas MySQL que funcionan bien por separado

SELECT sum(monthly_target) as month_target
FROM `tbl_goal`
inner join user
    on tbl_goal.uid=user.id where user.store=1 and month='February'

resultado: month_target = 9000

SELECT
    sum(net) as achieved,
    sum(hairs_total) as hairs_total,
    sum(beard_total) as beard_total,
    sum(product_total) as product_total
FROM `data`
inner join user
    on data.uid=user.id where user.store=1 and month='February'

resultado: logrado =103 pelos_total =63 barba_total = 40 producto_total = 0

Por favor, dame alguna pista sobre cómo unirlos en uno solo.

Mostrar la mejor respuesta

SELECT
  sum(monthly_target) as month_target,
  sum(net) as achieved,
  sum(hairs_total) as hairs_total,
  sum(beard_total) as beard_total,
  sum(product_total) as product_total
FROM
  user
  inner join `tbl_goal` on tbl_goal.uid = user.id
  inner join `data` on data.uid = user.id
where
  user.store = 1
  and month = 'February'

Esto probablemente no funcionará, porque resultará en un doble conteo.

¿A pesar de que la tabla de usuario tiene relación con ambas tablas?

La consulta anterior me da error: Análisis estático: se encontraron 2 errores durante el análisis. Este tipo de cláusula se analizó previamente. (cerca de "unión interna" en la posición 321) Tipo de instrucción no reconocido. (cerca de "unión interna" en la posición 321)

Difícil. Su condición de unión actual implica que desea agregar por usuario, pero la cláusula WHERE deja en claro que desea agregados a nivel de tienda. Entonces, podemos intentar reescribir su consulta para agregar por tienda. Cada una de las dos subconsultas a continuación realiza agregaciones separadas, trayendo el ID de store a través de una unión a la tabla de usuarios. Luego, por fuera unimos la tabla user a cada una de estas subconsultas.

SELECT
    u.store,
    COALESCE(t1.achieved, 0) AS achieved,
    COALESCE(t1.hairs_total, 0) AS hairs_total,
    COALESCE(t1.beard_total, 0) AS beard_total,
    COALESCE(t1.product_total, 0) AS product_total,
    COALESCE(t2.month_target 0) AS month_target
FROM user u
LEFT JOIN
(
    SELECT
        usr.store,
        SUM(d.net) AS achieved,
        SUM(d.hairs_total) AS hairs_total,
        SUM(d.beard_total) AS beard_total,
        SUM(d.product_total) AS product_total
    FROM data d
    INNER JOIN user usr
        ON d.uid = usr.id
    WHERE d.month = 'February'
    GROUP BY usr.store
) t1
    ON u.store = t1.store
LEFT JOIN
(
    SELECT
        usr.store,
        SUM(t.monthly_target) AS month_target
    FROM tbl_goal t
    INNER JOIN user usr
        ON t.uid = usr.id
    WHERE t.month = 'February'
    GROUP BY usr.store
) t2
    ON u.store = t2.store;
WHERE
    u.store = 1;

Si desea un informe de todas las tiendas, simplemente elimine la cláusula exterior WHERE.

¿Puedes verificarlo nuevamente ya que me está dando el error: # 1305 - La FUNCIÓN COALESECE no existe

@VishalHira Lo siento, fue un error tipográfico para COALESCE. No nos proporcionó datos, por lo tanto, no pudimos probar nuestra consulta.

funcionó de maravilla :) gracias, el error desapareció con COALESCE (MAX (t2.monthly_target)

Use múltiples combinaciones internas para lograr esto. Prueba esto

 SELECT sum(tbl_goal.monthly_target) as month_target,  sum(data.net) as achieved,
        sum(data.hairs_total) as hairs_total,
        sum(data.beard_total) as beard_total,
        sum(data.product_total) as product_total
    FROM `tbl_goal`
    inner join user
        on tbl_goal.uid=user.id
    inner join data on tbl_goal.uid=data.uid
     where user.store=1 and data.month='February'

Esto probablemente resultaría en un doble conteo.

está dando resultados pero no los mismos que quería: mes_objetivo = 11500 logrado = 412 pelos_total = 252 barba_total = 160 producto_total = 0

¿Es este el resultado real que espera o el resultado que obtuvo de la consulta anterior?

Resultado que obtuve de la consulta anterior. Mi resultado esperado está en duda. Gracias