【问题标题】:Query to compare the total sales of one saturday with the average of the other saturdays in the rest of the year查询一个星期六的总销售额与一年中其他星期六的平均销售额
【发布时间】:2019-11-28 14:48:35
【问题描述】:

您好,我有全年(ts)的每日记录的销售数据。我想比较 2018 年的一个星期六,所以假设 12 月 22 日的总销售额与全年其余星期六的平均总销售额(总共 51 个)进行比较。

【问题讨论】:

    标签: sql google-bigquery timestamp comparison average


    【解决方案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    
    

    【讨论】:

    • 谢谢,但我还需要计算查询中的销售额,以便为 (unit_price*quantity)
    • 这不是你的问题。您当前的问题已得到解答,因此请考虑选择“最佳”问题并接受它 - 这将提高您的声誉并激励我们进一步回答您的问题。同时-检查stackoverflow.com/a/59107706/5221944
    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      相关资源
      最近更新 更多