SELECT
s1.sales_date,
s1.country,
s1.sales_volume,
s2.fix_costs
FROM sales s1
JOIN sales s2 ON s1.country <> 'None' AND s2.country = 'None'
AND date_trunc('month', s1.sales_date) = date_trunc('month', s2.sales_date)
Anda membutuhkan self-join yang alami. Syarat bergabung adalah:
- Tabel pertama tanpa
None
catatan (s1.country <> 'None'
) - Tabel kedua hanya
None
catatan (s2.country = 'None'
) - Tanggal:Hanya pertimbangkan bagian tahun dan bulan, abaikan hari. Ini dapat dicapai dengan menormalkan tanggal kedua tabel ke awal bulan dengan menggunakan
date_trunc()
. Jadi, misalnya'2020-02-15'
menghasilkan'2020-02-01'
dan'2020-02-29'
menghasilkan'2020-02-01'
juga, yang berfungsi dengan baik sebagai perbandingan dan kondisi gabungan.
Alternatifnya :
SELECT
*
FROM (
SELECT
sales_date,
country,
sales_volume,
SUM(fix_costs) OVER (PARTITION BY date_trunc('month', sales_date)) as fix_costs
FROM sales
) s
WHERE country <> 'None'
Anda dapat menggunakan SUM()
fungsi jendela di atas grup date_trunc()
seperti yang dijelaskan di atas. Maka Anda perlu memfilter None
catatan setelahnya