首页 > 解决方案 > 限制顶部对列

问题描述

我正在使用的数据如下所示 -

category_id   subcategory_id    date       quantities       
    123            45          2020-02-01      500
    123            45          2020-02-13      400
    456            35          2020-05-09      350
    456            35          2020-05-15      250
    456            35          2020-06-18      200
     .
     .
     .
     n such columns

数量按降序排序我想获取前(顶部)10 个唯一对(category_id,subcategory_id)的数据(如上所示)。就像我们使用 limit 10 来获取前 10 条记录一样,我想限制前 10 个唯一对 (category_id, subcategory_id) 并获取所有数据,如上所示。

标签: sqlgoogle-bigquery

解决方案


以下是 BigQuery 标准 SQL

#standardSQL
SELECT * EXCEPT(rn) FROM (
  SELECT *, 
    ROW_NUMBER() OVER(PARTITION BY category_id, subcategory_id ORDER BY quantities DESC) rn
  FROM `project.dataset.table`
)
WHERE rn <= 10   

另一个 - 更多 BigQuery 的替代方案如下

#standardSQL
SELECT TopN.* FROM (
  SELECT ARRAY_AGG(t ORDER BY quantities DESC LIMIT 10) topN
  FROM `project.dataset.table` t
  GROUP BY category_id, subcategory_id
) t, t.topN

推荐阅读