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

У меня есть простая таблица, в которой есть столбец с датой, и в качестве примера в ней хранятся данные за 2015-01-15 гг. те же даты, но за ними следует число Amount со значениями 0, - ## и ##. Как бы я go смог сделать так, чтобы он суммировал все негативы и позитивы отдельно в месяц?

Пример данных

[ Amount | Date      ]
[ 0      | 2015-01-01]
[ -15    | 2015-01-09]
[ 566    | 2015-01-15]
[ 6      | 2015-01-25]
[ -2     | 2015-02-01]
[ -15    | 2015-02-09]
[ 10     | 2015-02-15]
[ 6      | 2015-02-25]

Таким образом, новые данные были бы в

[ Positives | Negatives | Date   ]
[ 572       | -15       | 2015-01]
[ 16        | -17       | 2015-02]

И так далее

Ответы [ 2 ]

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

Вы можете сделать условную агрегацию; least() и greatest() пригодятся для сокращения запроса.

Предполагается, что вы используете MySQL, как подсказывает тег phpmyadmin:

select
    sum(greatest(amount, 0)) positives,
    sum(least(amount, 0)) negatives,
    date_format(date, '%Y-%m') mon
from mytable
group by date_format(date, '%Y-%m')
0 голосов
/ 27 марта 2020

Использовать условное агрегирование:

select year(date), month(date),
       sum(case when amount > 0 then amount end) as positives,
       sum(case when amount < 0 then amount end) as negatives
from t
group by year(date), month(date);

Функции даты значительно различаются в разных базах данных. Хотя и не стандартные, большинство поддерживают year() и day(). Однако для вашей базы данных вам могут потребоваться другие функции.

...