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)
Bạn cần một sự tham gia tự nhiên. Điều kiện tham gia là:
- Bảng đầu tiên không có
None
bản ghi (s1.country <> 'None'
) - Bảng thứ hai chỉ
None
bản ghi (s2.country = 'None'
) - Ngày:Chỉ xem xét phần năm và tháng, bỏ qua ngày. Điều này có thể đạt được bằng cách chuẩn hóa ngày của cả hai bảng thành ngày đầu tiên của tháng bằng cách sử dụng
date_trunc()
. Vì vậy, v.d.'2020-02-15'
kết quả là'2020-02-01'
và'2020-02-29'
kết quả là'2020-02-01'
quá trình so sánh và điều kiện tham gia cũng hoạt động hiệu quả.
Ngoài ra :
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'
Bạn có thể sử dụng SUM()
chức năng cửa sổ trên nhóm date_trunc()
như đã mô tả ở trên. Sau đó, bạn cần lọc None
hồ sơ sau đó