您好,所以我有一个全年的每日记录销售数据(ts)。我想比较一下2018年周六的一个,所以可以说12月22日的总销售额与全年其他星期六的平均总销售额(共51个)进行了比较。
答案 0 :(得分:1)
以下是用于BigQuery标准SQL
#standardSQL
SELECT sale_date, sale_total,
ROUND((SUM(sale_total) OVER() - sale_total) / (COUNT(sale_total) OVER() - 1), 2) AS sale_rest_average
FROM `project.dataset.table`
WHERE EXTRACT(DAYOFWEEK FROM sale_date) = 7
AND EXTRACT(YEAR FROM sale_date) = 2018
它为您提供了2018年的所有星期六以及该年其余星期六的平均值
您可以使用下面的示例中的虚拟数据来测试,玩游戏
#standardSQL
WITH `project.dataset.table` AS (
SELECT day AS sale_date, ROUND(100 * RAND(), 2) sale_total
FROM UNNEST(GENERATE_DATE_ARRAY('2018-01-01', '2018-12-31')) day
)
SELECT sale_date, sale_total,
ROUND((SUM(sale_total) OVER() - sale_total) / (COUNT(sale_total) OVER() - 1), 2) AS sale_rest_average
FROM `project.dataset.table`
WHERE EXTRACT(DAYOFWEEK FROM sale_date) = 7
AND EXTRACT(YEAR FROM sale_date) = 2018
ORDER BY sale_date
输出如下
Row sale_date sale_total sale_rest_average
1 2018-01-06 35.12 42.81
2 2018-01-13 4.74 43.4
3 2018-01-20 61.55 42.29
4 2018-01-27 21.76 43.07
5 2018-02-03 67.82 42.17
...
49 2018-12-08 4.22 43.41
50 2018-12-15 59.46 42.33
51 2018-12-22 90.86 41.72
52 2018-12-29 56.92 42.38
答案 1 :(得分:0)
假设每天有一行,则可以使用条件聚合:
select avg(case when datecol = '2018-12-22' then sales end) as sales_20181222,
avg(case when datecol <> '2018-12-22' then sales end) as sales_other
from t
where extract(dayofweek from datecol) = 6 and
datecol >= date('2018-01-01') and
datecol < date('2019-01-01'); -- Saturday