我正在使用 BigQuery,我需要计算数据集列的第 25、第 50 和第 75 个百分位数。
例如,如何使用 BigQuery 和 STANDARD SQL 获得上述数字。我查看了 PERCENT_RANK、RANK 和 NTILE 函数,但似乎无法破解它。
这是一些可以指导我的代码
感谢帮助!
我正在使用 BigQuery,我需要计算数据集列的第 25、第 50 和第 75 个百分位数。
例如,如何使用 BigQuery 和 STANDARD SQL 获得上述数字。我查看了 PERCENT_RANK、RANK 和 NTILE 函数,但似乎无法破解它。
这是一些可以指导我的代码
感谢帮助!
查看标准 SQL 中的APPROX_QUANTILES函数。如果您要求 100 个分位数 - 您会得到百分位数。因此查询将如下所示:
SELECT percentiles[offset(25)], percentiles[offset(50)], percentiles[offset(75)]
FROM (SELECT APPROX_QUANTILES(column, 100) percentiles FROM Table)
如果近似聚合对您不起作用,您可能想要使用 PERCENTILE_CONT 函数(尽管它会使用更多内存,因此它可能不适用于大数据),例如以下示例来自此处
SELECT
PERCENTILE_CONT(x, 0) OVER() AS min,
PERCENTILE_CONT(x, 0.01) OVER() AS percentile1,
PERCENTILE_CONT(x, 0.5) OVER() AS median,
PERCENTILE_CONT(x, 0.9) OVER() AS percentile90,
PERCENTILE_CONT(x, 1) OVER() AS max
FROM UNNEST([0, 3, NULL, 1, 2]) AS x LIMIT 1;
+-----+-------------+--------+--------------+-----+
| min | percentile1 | median | percentile90 | max |
+-----+-------------+--------+--------------+-----+
| 0 | 0.03 | 1.5 | 2.7 | 3 |
+-----+-------------+--------+--------------+-----+
您可以使用下面的代码获得细粒度的百分位分析。
SELECT
offset + 1 AS percentile,
value AS percentile_value,
FROM UNNEST((
SELECT
APPROX_QUANTILES(value, 100) as percentile_value,
FROM data_set
)) AS percentile_value WITH OFFSET as offset
然后你可以根据需要得到任何百分位数。