sql - 限制顶部对列
问题描述
我正在使用的数据如下所示 -
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) 并获取所有数据,如上所示。
解决方案
以下是 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
推荐阅读
- java - 与同一实体的多对多关系
- html - Angular custom-control-input 不能与循环内的 formControlName 一起正常工作
- java - 当没有有效的匹配器时,使用 Mockito 有一种方法可以在方法调用上引发异常
- r - 计算字符串中完全匹配的单词数
- c - 限制的反义词是volatile吗?
- laravel - Laravel 中 Eloquent 中的情况
- azure-active-directory - AAD - 外部用户未自动添加到用户列表
- ios - 集合视图无法从标签中获取文本
- r - 用 pull-right 停止 pull-left 浮动
- php - 如何在php中通过ajax发送提交