Sebagai permulaan:kueri saat ini tidak melakukan apa yang Anda inginkan. Sepertinya Anda benar-benar membutuhkan jumlah jendela bulanan untuk fix_costs
. Jadi saya akan mulai dari:
select
sales_date,
country,
sum(sales_volume),
sum(sum(fix_costs)) over(partition by year(sales_date), month(sales_date))
/ day(last_day(sales_date))
as fix_cost_per_day
from sales
group by 1,2;
Ini menghasilkan:
sales_date | country | sum(sales_volume) | fix_cost_per_day :--------- | :------ | ----------------: | ---------------: 2020-01-03 | DE | 500 | 64.5161 2020-01-03 | FR | 350 | 64.5161 2020-01-03 | NL | 320 | 64.5161 2020-01-30 | None | 0 | 64.5161 2020-02-15 | DE | 700 | 172.4138 2020-02-15 | FR | 180 | 172.4138 2020-02-15 | NL | 420 | 172.4138 2020-02-29 | None | 0 | 172.4138 2020-03-27 | DE | 180 | 129.0323 2020-03-27 | FR | 970 | 129.0323 2020-03-27 | NL | 670 | 129.0323 2020-03-31 | None | 0 | 129.0323
Dari sana, Anda dapat menambahkan logika yang memperhitungkan "bagi hasil harian per negara". Seperti yang saya pahami pertanyaan Anda, yaitu:
select
sales_date,
country,
sum(sales_volume),
sum(sum(fix_costs)) over(partition by year(sales_date), month(sales_date))
/ day(last_day(sales_date))
* sum(sales_volume)
/ sum(sum(sales_volume)) over(partition by sales_date)
as fix_cost_per_day
from sales
group by 1,2;
Pengembalian:
sales_date | country | sum(sales_volume) | fix_cost_per_day :--------- | :------ | ----------------: | ---------------: 2020-01-03 | DE | 500 | 27.57099531 2020-01-03 | FR | 350 | 19.29969672 2020-01-03 | NL | 320 | 17.64543700 2020-01-30 | None | 0 | null 2020-02-15 | DE | 700 | 92.83819629 2020-02-15 | FR | 180 | 23.87267905 2020-02-15 | NL | 420 | 55.70291777 2020-02-29 | None | 0 | null 2020-03-27 | DE | 180 | 12.76143212 2020-03-27 | FR | 970 | 68.76993974 2020-03-27 | NL | 670 | 47.50088621 2020-03-31 | None | 0 | null
Jika perlu, Anda dapat menghapus catatan untuk negara 'None'
dengan mengubah kueri menjadi subkueri dan memfilter dalam kueri luar.