计算桶数组的每个元素内的行数

Count rows inside each element of an array of buckets

我查询了一些范围(或桶),现在我想计算每个范围内有多少元素。

例如,这可能是一组行:

id tx_value date
1 30 2022-03-04
2 0.30 2022-03-04
1 300 2022-03-03
4 3000 2022-03-05
5 30 2022-03-04

我用以下子句计算了范围:

ARRAY(SELECT tx_value_range * avg_tx_value
    FROM UNNEST([0.001, 0.01, 0.1, 1, 10, 100]) AS tx_value_range) AS tx_size_buckets

这是一个可能的范围:

[0.003, 0.03, 0.30, 3.0, 30.0, 300.0]

然后我努力得到的是计算放入每个桶中的行数,例如:

0.003, 3
0.03,  1
0.30,  4

我什至无法想出一个测试查询来计算这个,我认为我需要为每个事务行迭代存储桶数组以确定将行放在何处,但我可以'似乎无法将其明确表达为查询。

考虑以下

select any_value(ranges[offset(range_pos)]) `range` , count(*) rows_count
from your_table, 
unnest([struct([0.003, 0.03, 0.30, 3.0, 30.0, 300.0] as ranges)]),
unnest([struct(range_bucket(tx_value, ranges) - 1 as range_pos)])
group by range_pos

如果应用于您问题中的示例数据 - 输出为