Как сделать арифметику c сгруппировать по кварталам mySQL? - PullRequest
0 голосов
/ 13 марта 2020

У меня есть 2 таблицы, которые не имеют отношения к ним обоим.

Table of income
Id      Category    Nominal    Description         Date
----    --------    --------    --------         --------
1         ADD         10000           Q1        2020-03-05
2         DD          15000           Q2        2020-05-11
3         PAD          5000           Q3        2020-08-10

Table of outcome
Id      Category    Nominal    Description         Date
----    --------    --------    --------         --------
1         ADD          7000           Q1        2020-03-20
2         DD          10000           Q2        2020-06-02
3         PAD          2000           Q3        2020-08-28

Итак, я хочу сделать вычитание номинала из дохода с номиналом из группы результатов по кварталам.

Вот мой запрос:

CREATE view Total AS
    SELECT QUARTER(outcome.date) AS Qperiod, income.nominal-outcome.nominal AS remain
    FROM income, outcome
    GROUP BY YEAR(outcome.date), QUARTER(outcome.date)

этот результат как показано ниже, он описывает первую строку в вычете таблицы доходов по всем номинальным результатам.

Qperiod    remain    
----      -------- 
1             3000
2                0
3             8000

Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

1 голос
/ 13 марта 2020

В вашем запросе нет условия JOIN, поэтому каждая строка income сопоставляется с каждой строкой outcome. Поскольку у вас нет функции агрегирования, это фактически означает, что случайная строка из outcome вычитается из каждой строки income. Вы должны использовать современный явный синтаксис JOIN и поставить соответствующее условие JOIN, то есть год и квартал в обеих таблицах одинаковы:

CREATE view Total AS
    SELECT QUARTER(outcome.date) AS Qperiod, income.nominal-outcome.nominal AS remain
    FROM income
    JOIN outcome ON YEAR(outcome.date) = YEAR(income.date)
                AND QUARTER(outcome.date) = QUARTER(income.date)
    GROUP BY YEAR(outcome.date), QUARTER(outcome.date)

Вывод:

Qperiod     remain
1           3000
2           5000
3           3000

Демонстрация по SQLFiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...