Как получить не соответствующие столбцы и соответствующие столбцы с двумя sql таблицами - PullRequest
0 голосов
/ 27 марта 2020

У меня есть две таблицы доходов и расходов, я хочу включить столбцы, не соответствующие ни одной, в третью таблицу, чтобы иметь возможность суммировать и группировать доходы и расходы по месяцам и суммировать столбец Доход, чтобы получить итоговую сумму и сумму столбца расходов

             incomes table                                 expenses table
    -----------------------------------        ------------------------------------
    | incomeId |    date     | amount |        | expenseId |    date     | amount |
    +---------------------------------+        +----------------------------------+
    | 1        | 2/4/2020    | 3000   |        |  1        | 8/4/2020    | 3000   | 
    | 2        | 9/4/2020    | 9000   |        |  2        | 23/4/2020   | 3500   |
    | 3        | 15/9/2020   | 15000  |        |  1        | 9/3/2020    | 2000   |
    | 4        | 7/3/2020    | 7000   |        ------------------------------------
    ------------------------------------


                 Expected table Results
        ------------------------------------
        | Month     | Income     | Expense |
        +----------------------------------+
        | March     | 7000       | 2000    | 
        | April     | 12000      | 6500    |
        | September | 15000      |         |
        +==================================+
        | Total     | 34000      |  8500   |
        ====================================

SQL

  SELECT 
        Income.Month, 
        Income.Income, 
        Expense.Expense
      FROM(
            SELECT 
                DATE_FORMAT(date,'%M') AS Month, 
                SUM(amount) AS Income
            FROM income
            GROUP BY DATE_FORMAT(date, '%M')
           ) AS Incomes
      JOIN
          (
            SELECT
                  DATE_FORMAT(date,'%M') AS Month,
                  SUM(amount) AS Expense
            FROM expenses
            GROUP BY DATE_FORMAT(date, '%M') 
          ) AS Expense
       ON Expense.Month = Income.Month

1 Ответ

2 голосов
/ 27 марта 2020

Если вы хотите разрешить отсутствующие даты в обеих таблицах, вы можете эмулировать full join с union all:

select year(date) yr, month(date) mn, sum(income) income, sum(expense) expense
from (
    select date, amount income, null expense from incomes
    union all
    select date, null, amount from expenses
) t
group by year(date), month(date)
with rollup
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...