В заголовке вопроса написано «Подсчитать количество элементов в APPROX_QUANTILES», и я собираюсь на это ответить.Поскольку вашей конечной целью является для построения гистограммы, см. Этот вопрос .
Чтобы подсчитать количество элементов в каждом сегменте, мы можем сделать что-то вроде:
WITH data AS (
SELECT *, ActualElapsedTime datapoint
FROM `fh-bigquery.flights.ontime_201903`
WHERE FlightDate_year = "2018-01-01"
AND Origin = 'SFO' AND Dest = 'JFK'
)
, quantiles AS (
SELECT *, IFNULL(LEAD(bucket_start) OVER(ORDER BY bucket_i) , 0100000) bucket_end
FROM UNNEST((
SELECT APPROX_QUANTILES(datapoint, 10)
FROM data
)) bucket_start WITH OFFSET bucket_i
)
SELECT COUNT(*) count, bucket_i
, ANY_VALUE(STRUCT(bucket_start, bucket_end)) b, MIN(datapoint) min, MAX(datapoint) max
FROM data
JOIN quantiles
ON data.datapoint >= bucket_start AND data.datapoint < bucket_end
GROUP BY bucket_i
ORDER BY bucket_i
![enter image description here](https://i.stack.imgur.com/Fd6Lr.png)
Визуализируется, мы получаем что-то вроде:
![enter image description here](https://i.stack.imgur.com/KgJnY.png)
Что говорит нам:
- Не используйте
APPROX_QUANTILES
для построения гистограммы, потому что в каждом сегменте будет примерно одинаковое количество элементов.Это цель квантиля. APPROX_QUANTILES
очень "ПРИБЫЛЬ".Как вы можете видеть, каждый квантиль не получал одинаковое количество элементов. - От SFO до JFK требуется от ~ 305 до ~ 357 минут.