SQL: вычесть один запрос из другого - PullRequest
0 голосов
/ 31 мая 2019

Допустим, у меня есть две таблицы с именами tbl1 и tbl2 (разное количество столбцов и идентификаторов), и я получаю итоговую сумму каждой таблицы, используя следующие запросы:

query1:

SELECT MONTHNAME(tbl1_date), SUM(col1+col2+col3+col4) 
FROM myTbl1 
GROUP BY YEAR(tbl1_date), MONTH(tbl1_date);

query2:

SELECT MONTHNAME(tbl2_date), SUM(col1+col2+col3+col4+col5+col6) 
FROM myTbl2 
GROUP BY YEAR(tbl2_date), MONTH(tbl2_date);

Как можно вычесть query2 из query1 и получить разницу сумм?

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Соедините два запроса и затем вычтите.

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
0 голосов
/ 31 мая 2019

Если в таблицах могут быть разные месяцы и , то вам нужны все строки, тогда вы действительно хотите 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...