BigQuery SQL,获取中值,按日期分组?

Kom*_*980 3 google-bigquery

当尝试获取时,比如说使用窗口函数分区的中位数,我收到一条错误消息“ SELECT list expression引用既不分组也不聚合的列seller_stock ”,为什么会这样,我必须如何以不同的方式编写这个SQL?我每天有很多记录,我想返回每天的中位数......

SELECT date(snapshot_date) AS period, 
  PERCENTILE_DISC(**seller_stock**, 0.5) OVER (PARTITION BY snapshot_date) AS median_stock
FROM `table.name`  
WHERE snapshot_date >= "2022-04-01" 
GROUP BY snapshot_date
Run Code Online (Sandbox Code Playgroud)

小智 6

问题是你不能按 AGG 函数进行分组,因为你已经通过行获得了中位数,所以你只需要该语句的顶行。

您可以使用中间表或辅助表。

这是一个例子:

with median_data as (
  select 
    date(snapshot_date) AS period,
    PERCENTILE_DISC(seller_stock, 0.5) OVER (PARTITION BY snapshot_date) AS median_stock,
    row_number() over(order by snapshot_date) as r
  from `table.name`
  where snapshot_date >= "2022-04-01" 
)

select period,median_stock from median_data where r =  1
Run Code Online (Sandbox Code Playgroud)