google 大查询中的嵌套分区和排名
Nested partitioning and ranking in google big query
下面是数据的样子-
我想对这些数据进行不同级别的排序以实现最终输出。
1 级:
每当名称有重复值时,我想为每个不同的 (id, name,last_name, gender) 元组获得最少的排名。
1 级结果:
2 级:
在级别 2 中,我希望获得特定名称的每个性别类别的最低排名。
2 级结果:
最终输出:
对于每个名称,如果 'male' 和 'female' 排名相同,则 return 以 table 中最先出现的为准。如果不同 return 排名最低的记录。
预计最终结果-
我怀疑你可以按名称分区:
select *
from (
select
t.*,
row_number() over(partition by name order by ranking, id) rn
from mytable t
) t
where rn = 1
id
的第二个排序标准打破平局。
以下适用于 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
下面是数据的样子-
我想对这些数据进行不同级别的排序以实现最终输出。
1 级: 每当名称有重复值时,我想为每个不同的 (id, name,last_name, gender) 元组获得最少的排名。
1 级结果:
2 级: 在级别 2 中,我希望获得特定名称的每个性别类别的最低排名。
2 级结果:
最终输出: 对于每个名称,如果 'male' 和 'female' 排名相同,则 return 以 table 中最先出现的为准。如果不同 return 排名最低的记录。
预计最终结果-
我怀疑你可以按名称分区:
select *
from (
select
t.*,
row_number() over(partition by name order by ranking, id) rn
from mytable t
) t
where rn = 1
id
的第二个排序标准打破平局。
以下适用于 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