google-bigquery - BigQuery - 如何根据数组元素对查询结果进行排序
问题描述
我运行以下查询:
with x AS(
select agent_id, array_agg(struct(price_range as level, sales)) as price_range
from(select agent_id, price_range, count(*) sales
from (select 1 as agent_id, 'b' as price_range
union all
select 1 as agent_id, 'a' as price_range
union all
select 1 as agent_id, 'c' as price_range
union all
select 2 as agent_id, 'a' as price_range)
group by 1,2)
group by 1)
select * from x
我想首先按 agent_id 排序结果,然后按 price_range 级别排序。
问题是,如果我首先 unnest() 数组,我会得到交叉连接结果。
解决方案
如果我在构造数组之前对子查询结果进行排序,那么我会得到我想要的。
with x AS(
select agent_id, array_agg(struct(price_range as level, sales)) as price_range
from(select agent_id, price_range, count(*) sales
from (select 1 as agent_id, 'b' as price_range
union all
select 1 as agent_id, 'a' as price_range
union all
select 1 as agent_id, 'c' as price_range
union all
select 2 as agent_id, 'a' as price_range)
group by 1,2
order by 1,2) -- this additional line solved the issue
group by 1)
select * from x
推荐阅读
- python - 创建一个新列 - 仅按组分配最后一个值
- r - 为什么 text2vec 的 RWMD 模块中的距离在 1 和 -1 之间?
- c++ - 赋值运算符
- git - 在 Git 中,我可以“签出”本地仓库中的所有远程分支吗?
- android - 如何防止或删除库字符串资源以我的 apk 结尾?
- c# - 无法启动连接到远程 SQL 服务器的 windows 服务
- python - 基于列数据构建数据集
- python - 在按钮kivy中对齐文本位置和大小
- mongodb - MongoDB:使用最大聚合进行匹配和分组
- php - Woocommerce 自定义支付网关未执行 form.submit