在 presto sql 中创建垃圾箱 - 以编程方式
Creating bins in presto sql - programmatically
我是 Presto SQL 语法的新手,想知道是否存在将行分箱到特定范围内的 n
分箱的函数。
例如,我有一个 table,其中有 1m 个不同的整数,范围从 1 到 100。我该怎么做才能在 1 到 100 之间创建 20 个 bin(一个 bin 用于 1-5、6-10 , 11-15 ... 等)而不使用 20 个单独的 CASE WHEN
语句?是否有任何标准 SQL 函数可以执行装箱功能?
如有任何建议,我们将不胜感激!
您可以只使用整数除法:
select (intcol - 1) / 5 as bin
Presto 进行整数除法,因此您不必担心余数。
您可以使用标准 SQL 函数 width_bucket
。例如:
WITH data(value) AS (
SELECT rand(100)+1 FROM UNNEST(sequence(1,10000))
)
SELECT value, width_bucket(value, 1, 101, 20) bucket
FROM data
产生:
value | bucket
-------+--------
100 | 20
98 | 20
38 | 8
42 | 9
67 | 14
74 | 15
6 | 2
...
我是 Presto SQL 语法的新手,想知道是否存在将行分箱到特定范围内的 n
分箱的函数。
例如,我有一个 table,其中有 1m 个不同的整数,范围从 1 到 100。我该怎么做才能在 1 到 100 之间创建 20 个 bin(一个 bin 用于 1-5、6-10 , 11-15 ... 等)而不使用 20 个单独的 CASE WHEN
语句?是否有任何标准 SQL 函数可以执行装箱功能?
如有任何建议,我们将不胜感激!
您可以只使用整数除法:
select (intcol - 1) / 5 as bin
Presto 进行整数除法,因此您不必担心余数。
您可以使用标准 SQL 函数 width_bucket
。例如:
WITH data(value) AS (
SELECT rand(100)+1 FROM UNNEST(sequence(1,10000))
)
SELECT value, width_bucket(value, 1, 101, 20) bucket
FROM data
产生:
value | bucket
-------+--------
100 | 20
98 | 20
38 | 8
42 | 9
67 | 14
74 | 15
6 | 2
...