Таблица годовых доходов и расходов

0

У меня есть две таблицы Доход (id, доход, дата, userid) и таблица Expense (id,amount,date,userid). Теперь я пытаюсь создать View с суммой дохода, суммы суммы в год. Также он должен быть GROUPED by year и userid.

Таким образом, новая таблица (представление) должна иметь сумму дохода, расходов, год. Прямо сейчас я застрял над этим кодом.

SELECT
    id,
    i.Prihod,
    e.Rashod,
    YEAR
    YEAR(COALESCE(e.god, i.godi))) AS Godina , 
    users_id
FROM
    (
        SELECT 
            sum(insum) as 'Prihod',
            YEAR(datum) as 'Godi',
            users_id 
        FROM
        GROUP BY users_id
    ) as i
FULL OUTER JOIN
(
    SELECT 
        sum(amount) as 'Rashod',
        YEAR(datum) as 'God',
        users_id
    FROM expense
    GROUP BY users_id

) as e
Теги:
database

1 ответ

0

Это работа для структурированной части структурированного языка запросов. Начните с трех подзапросов (виртуальных таблиц).

Во-первых: список лет и пользователей. Вам это нужно, потому что MySQL не имеет возможности FULL OUTER JOIN. Если вы правильно напишете этот запрос, он будет содержать одну строку для каждого пользователя за каждый год, который вам нужен.

              SELECT DISTINCT YEAR(datum) Godi, users_id FROM income
              UNION
              SELECT DISTINCT YEAR(datum) Godi, users_id FROM expense

Во-вторых, резюме дохода по годам и пользователю.

               SELECT sum(insum) as Prihod,
                      YEAR(datum) as Godi,
                      users_id 
                 FROM income
                GROUP BY YEAR(datum), users_id

В-третьих, аналогичная сумма расходов по годам и пользователю

               SELECT sum(amount) as Rashod,
                      YEAR(datum) as God,
                      users_id 
                 FROM expense
                GROUP BY YEAR(datum), users_id

Затем проверьте эти подзапросы индивидуально, автономно, чтобы убедиться, что у вас есть ожидаемые результаты.

Наконец, соедините их вместе, как если бы они были столами, например

SELECT yr.users_id, yr.Godi, inc.Prihod, exp.Rashod
  FROM (
              SELECT DISTINCT YEAR(datum) Godi, users_id FROM income
              UNION
              SELECT DISTINCT YEAR(datum) Godi, users_id FROM expense
       ) yr
  LEFT JOIN (
               SELECT sum(insum) as Prihod,
                      YEAR(datum) as Godi,
                      users_id 
                 FROM income
                GROUP BY YEAR(datum), users_id
       ) inc ON yr.users_id = inc.users_id AND yr.Godi = inc.Godi 
  LEFT JOIN (
               SELECT sum(amount) as Rashod,
                      YEAR(datum) as God,
                      users_id 
                 FROM expense
                GROUP BY YEAR(datum), users_id
       ) exp ON yr.users_id = exp.users_id AND yr.Godi = exp.God 

Шаблон запроса здесь состоит в разработке трех подзапросов. Первое из них определяет количество строк в вашем конечном наборе результатов, поскольку оно содержит одну строку для каждой желаемой строки. У второго и третьего запросов есть одна или, может быть, нулевые строки для каждой строки, которая вам нужна в конечном наборе результатов. Тогда вы присоединитесь к ним вместе.

  • 0
    У меня не было возможности отладить это; Кроме того, я не знаю ваш родной язык, поэтому, возможно, я неправильно понял названия ваших столбцов. Если так, извините.
  • 0
    Ты проделал большую работу, она работает, ты спасаешь меня ... Thx O.Jones.
Показать ещё 1 комментарий

Ещё вопросы

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