Google bigquery BigQuery:分位数的GROUPBY子句

Google bigquery BigQuery:分位数的GROUPBY子句,google-bigquery,Google Bigquery,基于bigquery查询引用,当前分位数不允许按其他列进行任何类型的分组。我主要感兴趣的是按某一列对中间值进行分组。我现在看到的唯一解决方法是为每个不同的组成员生成一个分位数查询,其中组成员是where子句中的一个条件 例如,如果我想得到所需的结果,我会对y列中的每一行使用下面的查询 SELECT QUANTILE( <column-x>, 1001) FROM <table> WHERE <column-y> == <each distinc

基于bigquery查询引用,当前分位数不允许按其他列进行任何类型的分组。我主要感兴趣的是按某一列对中间值进行分组。我现在看到的唯一解决方法是为每个不同的组成员生成一个分位数查询,其中组成员是where子句中的一个条件

例如,如果我想得到所需的结果,我会对y列中的每一行使用下面的查询

SELECT QUANTILE( <column-x>, 1001)
FROM <table>
WHERE 
    <column-y> == <each distinct row in column-y>
大查询团队是否计划在将来使用一些功能来允许分位数分组? 有没有更好的方法来获得我想要的?
感谢

虽然有计算分位数的高效算法,但它们有点占用内存-试图在一个查询中进行多个分位数计算会很昂贵

有计划改进分位数,但我不知道时间表是什么。 你需要中位数吗?你能过滤异常值并对剩余值进行平均吗?
如果您的每组大小是固定的,您可以使用order、nest和nth组合进行破解。例如,如果每个f1值有9个不同的f2值,则对于中位数:

select f1,nth(5,f2) within record from ( select f1,nest(f2) f2 from ( select f1, f2 from table group by f1,f2 order by f2 ) group by f1 );
不确定子查询中的排序顺序是否能保证在第二个组中生存,但它在我尝试的一个简单测试中起了作用

使用最近发布的percentile_cont窗口功能,您可以获得中间值

请看公告博客文章中的示例:


我主要对中位数感兴趣。但是第99百分位和第99.9百分位应该是很好的。我也不能过滤掉异常值。因此,似乎我必须运行单独的查询才能获得所需的结果。不过,这将是一个很好的功能,可以在将来添加到大查询中。谢谢你的回复!您好@felipe hoffa,您在查询引用中有错误,因为那个里的查询返回1而不是4
SELECT MAX(median) AS median, room FROM (
  SELECT percentile_cont(0.5) OVER (PARTITION BY room ORDER BY data) AS median, room
  FROM [io_sensor_data.moscone_io13]
  WHERE sensortype='temperature'
)
GROUP BY room