Вы можете попробовать date_part
функцию, чтобы получить год и месяц, затем выполнить SUM
в подзапросе, затем самостоятельно присоединиться к месяцу и году и выполнить некоторые вычисления
CREATE TABLE T(
date timestamp,
name varchar(50),
percentile95 float
);
insert into T values ('2018-09-01','a',0.34);
insert into T values ('2018-09-02','a',0.41);
insert into T values ('2018-09-29','a',0.74);
insert into T values ('2018-09-30','a',0.39);
insert into T values ('2018-10-01','a',0.31);
insert into T values ('2018-10-02','a',0.24);
insert into T values ('2018-10-30','a',0.64);
insert into T values ('2018-09-30','a',0.89);
Запрос 1:
select
date,
t1.name,
concat((percentile95 * 100/total ),'%') percentile95
from T t1 JOIN (
SELECT
date_part('year', date) y,
date_part('month', date) m,
name,
sum(percentile95) total
FROM T
group by date_part('year', date),
date_part('month', date),
name
) v
ON
v.y = date_part('year', t1.date)
and
v.m = date_part('month', t1.date)
and
v.name = t1.name
Результаты :
| date | name | percentile95 |
|----------------------|------|----------------------|
| 2018-09-01T00:00:00Z | a | 12.2743682310469318% |
| 2018-09-02T00:00:00Z | a | 14.8014440433213004% |
| 2018-09-29T00:00:00Z | a | 26.7148014440433208% |
| 2018-09-30T00:00:00Z | a | 14.0794223826714795% |
| 2018-09-30T00:00:00Z | a | 32.1299638989169694% |
| 2018-10-02T00:00:00Z | a | 20.1680672268907557% |
| 2018-10-30T00:00:00Z | a | 53.7815126050420176% |
| 2018-10-01T00:00:00Z | a | 26.0504201680672267% |