BigQuery 选择重复列的一行
Posted
技术标签:
【中文标题】BigQuery 选择重复列的一行【英文标题】:BigQuery selecting one row of a repeated column 【发布时间】:2018-07-16 22:32:54 【问题描述】:假设我有一个包含这些列和值的表格:
------------- ----------
| customer_id | order_id |
|-------------|----------|
| 14 | 3 |
| 17 | 9 |
| 17 | 12 |
| 17 | 33 |
| 44 | 1 |
------------------------
即 2 列,其中一列可以获取重复值 (customer_id
),另一列不获取重复值 (order_id
)。
如何查询表以获得唯一的customer_id
值?当customer_id
被重复时,我想抓取具有最小order_id
的行。所以我假设为此需要一个ORDER BY
声明。
如果我使用GROUP BY
对列进行分组,我会得到如下查询:
#standardSQL
SELECT customer_id, order_id FROM table
GROUP BY customer_id, order_id;
仍然显示所有customer_id
行。
我厌倦了使用DISTINCT
,但这会产生相同的值。
【问题讨论】:
【参考方案1】:以下是 BigQuery 标准 SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT 14 customer_id, 3 order_id UNION ALL
SELECT 17, 9 UNION ALL
SELECT 17, 12 UNION ALL
SELECT 17, 33 UNION ALL
SELECT 44, 1
)
SELECT customer_id, MIN(order_id) AS order_id
FROM `project.dataset.table`
GROUP BY customer_id
-- ORDER BY customer_id
结果为
Row customer_id order_id
1 14 3
2 17 9
3 44 1
【讨论】:
以上是关于BigQuery 选择重复列的一行的主要内容,如果未能解决你的问题,请参考以下文章
如何通过删除基于 8 列中的 2 列的重复项来清理 BigQuery 表?
Google BigQuery:具有重复名称的联接表的所有列的前缀