BigQuery中如何按分组计算分位数取各分组第4分位最小值
解决方案
核心修改点为给NTILE窗口函数的OVER子句增加PARTITION BY Fruit参数,即可实现按每种水果单独计算分位数,同时修正了你原代码中CTE后多余的逗号语法问题,修改后完整SQL如下:
WITH quantiles AS ( SELECT NTILE(4) OVER(PARTITION BY Fruit ORDER BY Size) as quantile, Fruit, Size FROM DUMMY_TABLE ) SELECT MIN(Size) AS q4_min_size, Fruit FROM quantiles WHERE quantile = 4 GROUP BY Fruit
逻辑说明
PARTITION BY Fruit会将表中数据按水果类型拆分独立分区,每个分区内的记录单独按Size排序、单独拆分为4个分位,不同水果的分位计算互不干扰- 后续筛选第4分位记录、按水果分组取最小Size的逻辑和原有需求一致,即可得到每种水果第4分位的最小尺寸
对应你提供的示例数据表,运行结果为:
| Fruit | q4_min_size |
|---|---|
| Apple | 15 |
| Pear | 13 |
内容的提问来源于stack exchange,提问作者Rasmus Lehmann
相关产品推荐
相关产品推荐

