【问题标题】: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 的第二个排序标准打破了平局。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多