计算桶数组的每个元素内的行数
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
如果应用于您问题中的示例数据 - 输出为
我查询了一些范围(或桶),现在我想计算每个范围内有多少元素。
例如,这可能是一组行:
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
如果应用于您问题中的示例数据 - 输出为