根据bigquery查询引用,目前Quantiles不允许通过其他列进行任何类型的分组。我主要想要获得按某一列分组的中位数。我现在看到的唯一工作是为每个不同的组成员生成一个分位数查询,其中组成员是where子句中的条件。
例如,如果我想获得所需的结果,我会对列-y中的每个不同行使用以下查询。
SELECT QUANTILE( <column-x>, 1001)
FROM <table>
WHERE
<column-y> == <each distinct row in column-y>
由于
答案 0 :(得分:7)
通过最近公布的percentile_cont()窗口功能,您可以获得中位数。
查看公告博客文章中的示例:
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
答案 1 :(得分:1)
虽然有高效的算法来计算分位数,但它们在某种程度上是内存密集型的 - 尝试在单个查询中进行多个分位数计算会变得很昂贵。
答案 2 :(得分:0)
如果您的每个群组大小已修复,您可以使用order
,nest
和nth
的组合来破解它。例如,如果f2
的每个值有9个不同的f1
值,则为中位数:
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 );
不确定子查询中的排序顺序是否能保证在第二个group
中存活,但它在我尝试过的简单测试中起作用。