Допустим, у меня есть две таблицы с именами tbl1 и tbl2 (разное количество столбцов и идентификаторов), и я получаю месячную сумму каждой таблицы, используя следующие запросы:
запрос1:
SELECT MONTHNAME(tbl1_date), SUM(col1+col2+col3+col4)
FROM myTbl1
GROUP BY YEAR(tbl1_date), MONTH(tbl1_date);
запрос2:
SELECT MONTHNAME(tbl2_date), SUM(col1+col2+col3+col4+col5+col6)
FROM myTbl2
GROUP BY YEAR(tbl2_date), MONTH(tbl2_date);
Как я могу вычесть запрос2 из запроса1 и получить разницу сумм?
Соедините два запроса, а затем вычтите.
SELECT t1.month, t1.year, t1.total - t2.total AS diff
FROM (
SELECT MONTHNAME(tbl1_date) AS month, YEAR(tbl1_date) AS year, SUM(col1+col2+col3+col4) AS total
FROM myTbl1
GROUP BY YEAR(tbl1_date), MONTH(tbl1_date)
) AS t1
JOIN (
SELECT MONTHNAME(tbl2_date) AS month, YEAR(tb2_date) AS year, SUM(col1+col2+col3+col4+col5+col6) AS total
FROM myTbl2
GROUP BY YEAR(tbl2_date), MONTH(tbl2_date)
) AS t2 ON t1.month = t2.month AND t1.year = t2.year
Если в таблицах могут быть разные месяцы а также, вам нужны все строки, тогда вам действительно нужен full join
. MySQL не поддерживает это, но вы можете использовать union all
и group by
в этом случае:
SELECT yyyy, mon, SUM(s) - SUM(s2) as diff
FROM ((SELECT YEAR(tbl1_date) as yyyy,
MONTHNAME(tbl1_date) as mon,
SUM(col1+col2+col3+col4) as s1, 0 as s2
FROM myTbl1
GROUP BY YEAR(tbl1_date), MONTH(tbl1_date)
) UNION ALL
(SELECT YEAR(tbl2_date) as yyyy,
MONTHNAME(tbl2_date) as mon,
0, SUM(col1+col2+col3+col4) as s2
FROM myTbl12
GROUP BY YEAR(tbl2_date), MONTH(tbl2_date)
)
) ym
GROUP BY yyyy, mon;
Спасибо, что нашли время, чтобы помочь мне. В этом случае таблицы имеют одинаковые месяцы, и мне нужны месяцы по порядку. Спасибо еще раз!
Спасибо, что нашли время, чтобы помочь мне.