首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谷歌BigQuery APPROX_QUANTILES和真正的四分位数

谷歌BigQuery APPROX_QUANTILES和真正的四分位数
EN

Stack Overflow用户
提问于 2018-01-18 17:10:25
回答 1查看 11.8K关注 0票数 5

根据文档

返回一组表达式值的近似边界,其中number表示要创建的分位数数。此函数返回一个数字+1元素数组,其中第一个元素是近似最小值,最后一个元素是近似最大值。

听起来,如果我想要真正的四分位数,我需要使用APPROX_QUANTILES(values, 4),它将返回[minvalue, 1st quartile, 2nd quartile, 3rd quartile, maxvalue]

按照https://en.wikipedia.org/wiki/Quartile的说法,四分位集包含三个数据点--没有一个是数据的最小/最大值。

我的假设正确吗?APPROX_QUANTILES(values, 4)会返回真正的四分位数吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 19:37:30

作为基线,这是不经任何修改的输出,使用1到100之间的数字输入:

代码语言:javascript
运行
复制
SELECT APPROX_QUANTILES(x, 4) AS output
FROM UNNEST(GENERATE_ARRAY(1, 100)) AS x;
+----------------------------+
|           output           |
+----------------------------+
| ["1","25","50","75","100"] |
+----------------------------+

输出包括最小(1)和最大(100)。如果你只想要四分位数,你需要把它们从数组中去掉。为了提高可读性/可组合性,最好使用临时的SQL。这里,我对元素类型使用了INT64,但是您可以使用不同的元素类型,或者:

代码语言:javascript
运行
复制
CREATE TEMP FUNCTION StripFirstLast(arr ARRAY<INT64>) AS (
  ARRAY(SELECT x FROM UNNEST(arr) AS x WITH OFFSET
  WHERE OFFSET BETWEEN 1 AND ARRAY_LENGTH(arr) - 2)
);

SELECT
  APPROX_QUANTILES(x, 4) AS output,
  StripFirstLast(APPROX_QUANTILES(x, 4)) AS quartiles
FROM UNNEST(GENERATE_ARRAY(1, 100)) AS x;
+----------------------------+------------------+
|           output           |    quartiles     |
+----------------------------+------------------+
| ["1","25","50","75","100"] | ["25","50","75"] |
+----------------------------+------------------+

可以看到,quartiles数组只包含所需的值。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48326809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档