Как суммировать значения по месяцам из двух таблиц?
У меня две таблицы:
1)costs_1
-id
-total
-updated_at(timestamp)
2)costs_2
-id
-total_1
-updated_at_1(timestamp)
Таблица результатов должна иметь следующие столбцы:
-total
-total_1
-month
Например, если у меня есть одна таблица, я делаю следующий запрос:
SELECT SUM(total), MONTH(updated_at), YEAR(updated_at) FROM product_sale GROUP BY MONTH(updated_at), YEAR(updated_at) ORDER by MONTH(updated_at)
Я считаю, что тебе нужно что-то подобное.
SELECT t1.y year,
t1.m month,
t1.total,
t2.total
FROM
(
SELECT YEAR(updated_at) y,
MONTH(updated_at) m,
SUM(total) total
FROM costs_1
GROUP BY YEAR(updated_at), MONTH(updated_at)
) t1
JOIN
(
SELECT YEAR(updated_at_1) y,
MONTH(updated_at_1) m,
SUM(total_1) total
FROM costs_2
GROUP BY YEAR(updated_at_1), MONTH(updated_at_1)
) t2 ON t1.y = t2.y and t1.m = t2.m
Однако в этом решении вы пропустите месяц, если у costs_1
или costs_2
нет записи с месяцем. Если вы хотите ПОЛНЫЙ ПРИСОЕДИНЯЙТЕСЬ, вы должны эмулировать его в mysql, используя два OUTER JOINS, например:
SELECT t1.y year,
t1.m month,
COALESCE(t1.total, 0),
COALESCE(t2.total, 0)
FROM
(
SELECT YEAR(updated_at) y,
MONTH(updated_at) m,
SUM(total) total
FROM costs_1
GROUP BY YEAR(updated_at), MONTH(updated_at)
) t1
LEFT JOIN
(
SELECT YEAR(updated_at_1) y,
MONTH(updated_at_1) m,
SUM(total_1) total
FROM costs_2
GROUP BY YEAR(updated_at_1), MONTH(updated_at_1)
) t2 ON t1.y = t2.y and t1.m = t2.m
UNION
SELECT t2.y year,
t2.m month,
COALESCE(t1.total, 0),
COALESCE(t2.total, 0)
FROM
(
SELECT YEAR(updated_at) y,
MONTH(updated_at) m,
SUM(total) total
FROM costs_1
GROUP BY YEAR(updated_at), MONTH(updated_at)
) t1
RIGHT JOIN
(
SELECT YEAR(updated_at_1) y,
MONTH(updated_at_1) m,
SUM(total_1) total
FROM costs_2
GROUP BY YEAR(updated_at_1), MONTH(updated_at_1)
) t2 ON t1.y = t2.y and t1.m = t2.m
Попробуй это:
SELECT total, total_1, MONTHNAME(costs_1.updated_at) from costs_1 INNER JOIN costs_2
ON
MONTH(costs_1.updated_at)=MONTH(costs_2.updated_at)