【问题标题】:Nested partitioning and ranking in google big query谷歌大查询中的嵌套分区和排名
【发布时间】:2020-06-29 00:45:39
【问题描述】:
下面是数据的样子——
我想对这些数据进行不同层次的排序,以达到最终的输出。
1 级:
每当 name 有重复值时,我想为每个不同的(id、name、last_name、gender)元组获得最低排名。
1 级结果:
2 级:
在第 2 级中,我希望为特定名称的每个性别类别获得最低排名。
2 级结果:
最终输出:
对于每个名称,如果“男性”和“女性”等级相同,则返回表中首先出现的那个。如果不同,则返回排名最低的记录。
预计最终结果-
【问题讨论】:
标签:
sql
google-bigquery
greatest-n-per-group
window-functions
ranking
【解决方案1】:
以下是 BigQuery 标准 SQL
#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY ranking, id LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY name
【解决方案2】:
我怀疑你可以只按名称分区:
select *
from (
select
t.*,
row_number() over(partition by name order by ranking, id) rn
from mytable t
) t
where rn = 1
id 的第二个排序标准打破了平局。