【问题标题】:How to calculate median monthly from date of month table?如何从月表中计算月中位数?
【发布时间】:2021-03-06 01:02:59
【问题描述】:

我的数据集:

Date         Num_orders
Mar 21 2019  69
Mar 22 2019  82
Mar 24 2019  312
Mar 25 2019  199
Mar 26 2019  2,629
Mar 27 2019  2,819
Mar 28 2019  3,123
Mar 29 2019  3,332
Mar 30 2019  1,863
Mar 31 2019  1,097
Apr 01 2019  1,578
Apr 02 2019  2,353
Apr 03 2019  2,768
Apr 04 2019  2,648
Apr 05 2019  3,192
Apr 06 2019  2,363
Apr 07 2019  1,578
Apr 08 2019  3,090
Apr 09 2019  3,814
Apr 10 2019  3,836
...

我需要从同月的天数计算每月的订单中位数:

想要的结果:

Month      Median_monthly
Mar 2019   1,863
Apr 2019   2,768
May 2019   2,876
Jun 2019   ...
...

我尝试使用函数 date_trunc 从数据集中提取月份,然后按“月份”分组,但没有成功。感谢您的帮助,我使用的是 Google Bigquery (#standard) 环境!

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    可能您尝试使用 PERCENTILE_CONT 不能与 GROUP BY 一起使用:

    尝试使用APPROX_QUANTILES(x, 100)[OFFSET(50)]。它应该适用于GROUP BY

    SELECT APPROX_QUANTILES](Num_orders, 100)\[OFFSET(50)\] AS median
    FROM myTable
    GROUP BY Month
    

    您可以在子查询中使用 PERCENTILE_CONT:

    SELECT
      DISTINCT Month, median
    FROM (
      SELECT
        Month,
        PERCENTILE_CONT(Num_orders, 0.5) OVER(PARTITION BY Month) AS median
      FROM myTable
    )
    

    【讨论】:

      【解决方案2】:

      这通常使用DISTINCT

      SELECT DISTINCT DATE_TRUNC(month, date),
             PERCENTILE_CONT(Num_orders, 0.5) OVER (PARTITION BY DATE_TRUNC(month, date) AS median
      FROM myTable;
      

      注意:有两个百分位函数,PERCENTILE_CONT()PERCENTILE_DISC()。当数据中间存在“平局”时,它们会产生不同的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-11
        • 1970-01-01
        • 1970-01-01
        • 2013-04-07
        • 1970-01-01
        相关资源
        最近更新 更多