Вычислительные процентили в BigQuery
Я использую BigQuery, и мне нужно вычислить 25-й, 50-й и 75-й процентиль столбца набора данных.
Например, как я могу получить вышеупомянутые числа, используя BigQuery и STANDARD SQL. Я посмотрел на функции PERCENT_RANK, RANK и NTILE, но, похоже, не могу их взломать.
Вот код, который может помочь мне
Ценю помощь!
3 ответа
Проверьте функцию APPROX_QUANTILES в стандартном SQL. Если вы попросите 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
Затем вы можете получить любой процентиль по мере необходимости.