Слияние двух MySQL запросов работает нормально отдельно

0
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'

результат: 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'

результат: достигнуто = 103 hairs_total = 63 beard_total = 40 product_total = 0

пожалуйста, дайте мне какой-нибудь намек, как можно объединить их в один?

Теги:
database

3 ответа

2
Лучший ответ

Трудный. Ваше текущее условие соединения подразумевает, что вы хотите агрегировать по пользователю, но WHERE дает понять, что вы хотите агрегаты уровня хранилища. Таким образом, мы можем попробовать переписать ваш запрос для агрегирования по магазину. Каждый из двух подзапросов ниже выполняет отдельные агрегации, вводя идентификатор store через соединение в пользовательскую таблицу. Затем, снаружи, мы присоединяем user таблицу к каждому из этих подзапросов.

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;

Если вам нужен отчет обо всех магазинах, просто удалите внешнее WHERE.

  • 0
    Можете ли вы проверить его еще раз, так как он дает мне ошибку: # 1305 - FUNCTION COALESECE не существует
  • 0
    @VishalHira Извините, это была опечатка для COALESCE . Вы не предоставили нам никаких данных, поэтому мы не смогли проверить наш запрос.
Показать ещё 1 комментарий
0
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'
  • 0
    Это, вероятно, не сработает, потому что это приведет к двойному счету.
  • 0
    Даже если пользовательская таблица имеет отношение к обеим таблицам?
Показать ещё 2 комментария
0

Для достижения этого используйте множественное внутреннее соединение. Попробуй это

 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'
  • 0
    Это, вероятно, приведет к двойному счету.
  • 0
    это дало результаты, но не то, что я хотел: month_target = достигнут 11500 = 412 hairs_total = 252 beard_total = 160 product_total = 0
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню