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 选择重复列的一行的主要内容,如果未能解决你的问题,请参考以下文章

新列的多个 BigQuery 子选择

在 BigQuery 中选择具有不同 2 列的最新事件

如何通过删除基于 8 列中的 2 列的重复项来清理 BigQuery 表?

Google BigQuery:具有重复名称的联接表的所有列的前缀

如何选择第 n 列,并在 BigQuery 中对列的选择进行排序

根据 BigQuery 中嵌套字段的不同值选择行