Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Подсчитать сумму для каждого месяца  [new]
Armoriel
Member

Откуда:
Сообщений: 2
Всем привет.
Я не очень понимаю, как подсчитать сумму для каждого месяца. Например за '2015-10' и '2016-10'. Датасет приложил.

К сообщению приложен файл. Размер - 24Kb
23 мар 21, 09:16    [22298575]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
Armoriel
Member

Откуда:
Сообщений: 2
Разобрался.
23 мар 21, 09:40    [22298584]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 2241
Armoriel,

Молодец. Обращайся если что.
23 мар 21, 10:15    [22298603]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
mayton
Member

Откуда: loopback
Сообщений: 51015
Надо ответ написать. Это будет честно по отношению к другим читателям форума.
23 мар 21, 12:37    [22298734]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 2241
mayton
Надо ответ написать


Отрыл функцию, которая выдирает из даты месяц, да сделал group by с суммой по ней. Операция элементарная, просто мозги в процессе работы впали в ступор, а написание поста на форум помогло выйти из тупикового цикла.

Сообщение было отредактировано: 24 мар 21, 05:05
24 мар 21, 05:12    [22299209]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
Cola
Member

Откуда:
Сообщений: 439
crutchmaster
mayton
Надо ответ написать


Отрыл функцию, которая выдирает из даты месяц, да сделал group by с суммой по ней. Операция элементарная, просто мозги в процессе работы впали в ступор, а написание поста на форум помогло выйти из тупикового цикла.

А можно примерчик?
За ранее благодарна!
25 мар 21, 13:32    [22299795]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
Cola
Member

Откуда:
Сообщений: 439
Cola,
вот. если кому-то понадобится
SELECT 
EXTRACT ('day' from  "data") AS "day", 
EXTRACT ('month' from  "data") AS "manth", 
EXTRACT('year' from "data") AS "year",  
    SUM(val) AS summ
FROM scheta 
 G
ROUP BY 
  "day",
  "manth", 
  "year"
  Order by "year","manth","day"
25 мар 21, 13:54    [22299820]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
mayton
Member

Откуда: loopback
Сообщений: 51015
А если так?

select 
 date_trunc('day', "data"),
 sum(val) as sum
from 
 scheta
group by 
 date_trunc('day', "data")
ordr by 
 date_trunc('day', "data")


Не тестил. Может где-то синтаксически ошибся.
25 мар 21, 14:40    [22299855]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
Cola
Member

Откуда:
Сообщений: 439
Есть другой вопрос. Предположим, что не для каждого месяца есть результат, но нужно что бы отображались все месяцы. Соответственно месяцы без результата с нулями. Как сие сделать.
Какие мысли есть? Всем за ранее спасибо!
25 мар 21, 20:22    [22300074]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 2241
Cola
Какие мысли есть? Всем за ранее спасибо!

Кто-то делает на субд то, что делать на ней не надо.
Cola
Есть другой вопрос. Предположим, что не для каждого месяца есть результат, но нужно что бы отображались все месяцы.

Делать таблицу/генерировать выборку с месяцами и делать left join с ней.
26 мар 21, 04:30    [22300176]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
Guzya
Member

Откуда:
Сообщений: 712
join-нить c

select * from generate_series('2021-01-01','2022-01-01','1 months'::interval);
    generate_series     
------------------------
 2021-01-01 00:00:00+00
 2021-02-01 00:00:00+00
 2021-03-01 00:00:00+00
 2021-04-01 00:00:00+00
 2021-05-01 00:00:00+00
 2021-06-01 00:00:00+00
 2021-07-01 00:00:00+00
 2021-08-01 00:00:00+00
 2021-09-01 00:00:00+00
 2021-10-01 00:00:00+00
 2021-11-01 00:00:00+00
 2021-12-01 00:00:00+00
 2022-01-01 00:00:00+00
26 мар 21, 12:28    [22300307]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
Cola
Member

Откуда:
Сообщений: 439
Guzya, Спасибо!!!
26 мар 21, 14:17    [22300363]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
Cola
Member

Откуда:
Сообщений: 439
Guzya
join-нить c

select * from generate_series('2021-01-01','2022-01-01','1 months'::interval);
    generate_series     
------------------------
 2021-01-01 00:00:00+00
 2021-02-01 00:00:00+00
 

А подскажите как приджоинить запрос?
Всем за ранее спасибо!
26 мар 21, 15:50    [22300408]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
Guzya
Member

Откуда:
Сообщений: 712
На вскидку

select 
  date_trunc('month',d)
  ,sum_pay
  ,cn 
from generate_series('2020-01-01','2022-05-01','1 months'::interval) as d 
left join 
(  select
    date_trunc('month', ts) as ts
    , sum(pay) as sum_pay
    , count(*) as cn 
  from test group by  date_trunc('month', ts)
) as p on p.ts=date_trunc('month',d);


       date_trunc       | sum_pay | cn 
------------------------+---------+----
 2020-01-01 00:00:00+00 |      45 |  3
 2020-02-01 00:00:00+00 |      15 |  1
 2020-03-01 00:00:00+00 |         |   
 2020-04-01 00:00:00+00 |      30 |  2
 2020-05-01 00:00:00+00 |         |   
 2020-06-01 00:00:00+00 |         |   
 2020-07-01 00:00:00+00 |      30 |  2
 2020-08-01 00:00:00+00 |         |   
 2020-09-01 00:00:00+00 |         |   
 2020-10-01 00:00:00+00 |         |   
 2020-11-01 00:00:00+00 |         |   
 2020-12-01 00:00:00+00 |         |   
 2021-01-01 00:00:00+00 |      30 |  2
 2021-02-01 00:00:00+00 |         |   
 2021-03-01 00:00:00+00 |         |   
 2021-04-01 00:00:00+00 |         |   
 2021-05-01 00:00:00+00 |         |   
 2021-06-01 00:00:00+00 |         |   
 2021-07-01 00:00:00+00 |         |   
 2021-08-01 00:00:00+00 |         |   
 2021-09-01 00:00:00+00 |         |   
 2021-10-01 00:00:00+00 |         |   
 2021-11-01 00:00:00+00 |         |   
 2021-12-01 00:00:00+00 |         |   
 2022-01-01 00:00:00+00 |         |   
 2022-02-01 00:00:00+00 |         |   
 2022-03-01 00:00:00+00 |         |   
 2022-04-01 00:00:00+00 |         |   
 2022-05-01 00:00:00+00 |         |   
26 мар 21, 16:52    [22300447]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать сумму для каждого месяца  [new]
Cola
Member

Откуда:
Сообщений: 439
Guzya, еще раз спасибо!
26 мар 21, 17:08    [22300470]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить