一开始我生成你的表with T as ()
然后使用您的查询获取 QUANTILES(此处仅 10 个以使示例更具可读性)。然后是数据是unnest,并且row_number 每行都有一个索引值。 Pivot 将每个数字放在一列中。从 1 到 100 的数字必须手写。
With T as (
Select 1 id, "Bacelona" city, 300 price UNION ALL
select 2,"Barcelona", 200 UNION ALL
select 3,"London", 1000 UNION ALL
select 4,"London", 2000
)
SELECT *
from(
SELECT city,quant,row_number() over (partition by city) as r
from (
SELECT AS STRUCT City, APPROX_QUANTILES(CAST(Price as INTEGER), 10) AS quants, row_number() over (partition by city) as r
FROM T
where Price > 0
group by City
), unnest(quants) as quant
)
pivot( min(quant) for r in ( 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) )
如果应该命名列名:
SELECT city,quant,concat("quant",cast(row_number() over (partition by city) as string)) as r
...
pivot( min(quant) for r in ( "quant1","quant2","quant3") )