Sql 基于数据创建范围
我有不同价格的产品。我想看看在特定的价格范围内销售了多少产品。为此,我需要浏览数据,看看如何划分范围,然后得到该范围内的产品数量 数据如下所示-Sql 基于数据创建范围,sql,google-bigquery,Sql,Google Bigquery,我有不同价格的产品。我想看看在特定的价格范围内销售了多少产品。为此,我需要浏览数据,看看如何划分范围,然后得到该范围内的产品数量 数据如下所示- Product Price sold A 4.5 B 45.7 C 20 D 20.1 E 36.8 F 50 例如,对于上述数据,我看到最小值为
Product Price sold
A 4.5
B 45.7
C 20
D 20.1
E 36.8
F 50
例如,对于上述数据,我看到最小值为4.5,最大值为50。因此,我决定将价格范围划分为-0-10美元、11-20美元、21-30美元、30-40美元、40-50美元$
所以,结果应该是这样的-
Range No. of products sold
0-10 1
11-20 2
21-30 0
30-40 1
40-50 2
价格浮动,因此,范围应考虑浮动值。这可能吗?您可以使用生成数组。我想这样说:
select lb, lb + 10 as ub, count(d.product)
from unnest(generate_array(0, 50, 10)) lb left join
data d
on d.price >= lb and
d.price < lb + 10
group by lb
order by lb;
您可以将下限和上限连接在一起,但将它们保留在两列中似乎很有用。您可以使用generate\u array。我想这样说:
select lb, lb + 10 as ub, count(d.product)
from unnest(generate_array(0, 50, 10)) lb left join
data d
on d.price >= lb and
d.price < lb + 10
group by lb
order by lb;
您可以将下限和上限连接在一起,但将它们放在两列中似乎很有用。下面是针对BigQuery标准SQL的
#standardSQL
WITH price_ranges AS (
SELECT '0-10' price_range UNION ALL
SELECT '11-20' UNION ALL
SELECT '21-30' UNION ALL
SELECT '30-40' UNION ALL
SELECT '40-50'
)
SELECT price_range, COUNT(1) number_sold
FROM `project.dataset.table`
JOIN price_ranges
ON CAST(price_sold AS INT64)
BETWEEN CAST(SPLIT(price_range, '-')[OFFSET(0)] AS INT64)
AND CAST(SPLIT(price_range, '-')[OFFSET(1)] AS INT64)
GROUP BY price_range
-- ORDER BY price_range
如果要应用于您问题中的样本数据-结果为
Row price_range number_sold
1 0-10 1
2 11-20 2
3 30-40 1
4 40-50 2
下面是BigQuery标准SQL
#standardSQL
WITH price_ranges AS (
SELECT '0-10' price_range UNION ALL
SELECT '11-20' UNION ALL
SELECT '21-30' UNION ALL
SELECT '30-40' UNION ALL
SELECT '40-50'
)
SELECT price_range, COUNT(1) number_sold
FROM `project.dataset.table`
JOIN price_ranges
ON CAST(price_sold AS INT64)
BETWEEN CAST(SPLIT(price_range, '-')[OFFSET(0)] AS INT64)
AND CAST(SPLIT(price_range, '-')[OFFSET(1)] AS INT64)
GROUP BY price_range
-- ORDER BY price_range
如果要应用于您问题中的样本数据-结果为
Row price_range number_sold
1 0-10 1
2 11-20 2
3 30-40 1
4 40-50 2
目前的答案似乎都没有回答这个问题:当两个答案都假设范围为0-50时,如何生成范围 您似乎想要的是直方图,您可以在这里找到答案: 现在,如果您想在每个桶之间设置圆形台阶: 以数据为基础 从'fh-bigquery.public\u dump.gdp\u capital'中选择*` ,最小值和最大值为 选择MINgdp\u Capital min、MAXgdp\u Capital max 从数据 ,生成_bucket作为 选择x铲斗_min ,如果NullLeadX超额订购x,则1+从最小值和最大桶中选择最大值 从unnestu数组生成 根据您的起点,从最小值和最大值中选择0或0 ,从最小值和最大值中选择最大值 ,选择POW10,FHOFF.x.intLOG10max-min/10,从min_和_max log10中选择10个步骤的四舍五入顺序 x 挑选* 从生成存储桶 使用这些桶,您现在可以获得直方图: 选择桶最小值、桶最大值、计数*c 从生成存储桶 连接数据 关于data.gdp\u capital>=bucket\u min和data.gdp\u capital
在我的回答中,我看不出范围是如何固定的——我认为它非常通用,允许使用任何范围:oI的意思是固定的,因为在用户中,必须键入用户想要使用的任何范围。但是问题的标题是基于数据创建范围,所以我想回答如何基于表格中的数据创建范围。哦,我现在明白你的意思了:o