Sql 查询以将一个星期六的总销售额与今年剩余时间内其他星期六的平均销售额进行比较

Sql 查询以将一个星期六的总销售额与今年剩余时间内其他星期六的平均销售额进行比较,sql,google-bigquery,timestamp,comparison,average,Sql,Google Bigquery,Timestamp,Comparison,Average,你好,我有一整年的每日记录销售数据。我想比较一下2018年的一个星期六,比如说12月22日的总销售额与全年剩余星期六的平均总销售额之比,共计51 假设每天有一行,可以使用条件聚合: 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_othe

你好,我有一整年的每日记录销售数据。我想比较一下2018年的一个星期六,比如说12月22日的总销售额与全年剩余星期六的平均总销售额之比,共计51

假设每天有一行,可以使用条件聚合:

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

下面是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    

谢谢,但我还需要计算查询中的销售额,因此这将是单价*数量这不是你的问题。你现在的问题被回答了,所以请考虑挑选最好的一个并接受它-这将增加你的声誉,并将激励我们进一步回答你的问题。同时-检查