[英]Issue with aggregating data when data missing on certain dates
我如何編輯以下 SQL 查詢以獲得每天和每個變體的結果,其中我有一個 A/B/控制測試:
SELECT
t.day, t.type AS variant_type, t.clicks,
t2.type AS control, t2.control_clicks
FROM
table1 t
LEFT JOIN
table1 t2 ON t.day = t2.day
AND t2.type = 'control'
目前,只有在 from 子句中有給定日期的數據時,數據才會通過。 這會導致在進一步聚合數據時出現問題。
當前結果:
天 | 變體 | variant_clicks | 控制 | 控制點擊 |
---|---|---|---|---|
2020-01-01 | A | 1000 | 控制 | 1500 |
2020-01-01 | b | 2000 | 控制 | 1500 |
2020-01-01 | 控制 | 1500 | 控制 | 1500 |
2020-01-02 | 控制 | 1700 | 控制 | 1700 |
期望的結果:
天 | 變體 | variant_clicks | 控制 | 控制點擊 |
---|---|---|---|---|
2020-01-01 | A | 1000 | 控制 | 1500 |
2020-01-01 | b | 2000 | 控制 | 1500 |
2020-01-01 | 控制 | 1500 | 控制 | 1500 |
2020-01-02 | A | 0 | 控制 | 1700 |
2020-01-02 | b | 0 | 控制 | 1700 |
2020-01-02 | 控制 | 1700 | 控制 | 1700 |
任何幫助將不勝感激!
您可以使用cross join
生成行,然后使用left join
引入現有數據:
SELECT d.day, v.type as variant_type,
COALESCE(t.clicks, 0) as clicks, 'control' as control,
MAX(t.clicks) FILTER (WHERE type = 'control') OVER (PARTITOIN BY d.day) as control_clicks
FROM (SELECT DISTINCT day FROM table1) d CROSS JOIN
(VALUES ('a', 'b', 'control')) v(type) LEFT JOIN
table1 t
ON t.day = d.day AND t.type = v.type;
注意:這使用 window 函數來獲取控件點擊而不是單獨的聚合和join
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.