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)
Hai bisogno di un naturale self-join. Le condizioni di adesione sono:
- Primo tavolo senza
None
record (s1.country <> 'None'
) - Seconda tabella solo
None
record (s2.country = 'None'
) - Data:considera solo la parte di anno e mese, ignora i giorni. Ciò può essere ottenuto normalizzando le date di entrambe le tabelle al primo del mese utilizzando
date_trunc()
. Quindi, ad es.'2020-02-15'
risulta in'2020-02-01'
e'2020-02-29'
risulta in'2020-02-01'
anche, che funziona bene come confronto e condizione di unione.
In alternativa :
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'
Puoi usare SUM()
funzione finestra sul gruppo di date_trunc()
come descritto sopra. Quindi è necessario filtrare None
record in seguito