首页 > 解决方案 > 如何从月表中计算月中位数?

问题描述

我的数据集:

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) 环境!

标签: sqlgoogle-bigquery

解决方案


这通常会使用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()。当数据中间有“领带”时,它们会产生不同的结果。


推荐阅读