【问题标题】:BigQuery: Get top 3 records for each groupBigQuery:获取每个组的前 3 条记录
【发布时间】:2021-05-05 00:01:33
【问题描述】:

我是大查询的新手。我需要每组的前 3 名

| Name  | Group | Score |
| A     | 1     | 100   |
| B     | 2     | 80    |
| C     | 3     | 101   |
| D     | 1     | 53    |
| X     | 2     | 8     |
| Y     | 3     | 61    |
| Z     | 1     | 97    |
| W     | 2     | 20    |

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    考虑下面

    select * except(pos)
    from (
      select *, row_number() over(partition by `group` order by score desc) pos 
      from `project.dataset.table`
    )
    where pos <= 3     
    

    另一种选择(更多 BigQuery'ish)

    select arr.*
    from (
      select array_agg(t order by score desc limit 3) arr
      from `project.dataset.table` t
      group by `group`
    ) a, a.arr
    

    【讨论】:

    • 你试过了吗?考虑投票并接受:o)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2022-11-17
    • 2014-04-06
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多