如何在 Google Big Query 中展平一行中的值

How to flatten values in a row in Google Big Query

伙计们

我的大查询数据有问题。我有一个像 pic #1 这样的数据集,我需要对我的用户进行排名并将他们的排名注释分组在一个独特的行中(如 pic #2)。需要说明的是,我的 ranking 列类型是 int,而不是 array

是否可以处理这个 w/bigquery 或者我是否需要将这个数据集传输到 python 并在那里进行转换?

图片 #1 原始数据集

图片 #2 分组和格式化的数据集

以下是 BigQuery 标准的示例 SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'a' user, 10 ranking UNION ALL
  SELECT 'b',  2 UNION ALL
  SELECT 'a', 12 UNION ALL
  SELECT 'a', 14 UNION ALL
  SELECT 'c', 22 UNION ALL
  SELECT 'd', 21 
)
SELECT 
  user, 
  MAX(ranking) AS ranking_max,
  STRING_AGG(CAST(ranking AS STRING)) ranking_list
FROM `project.dataset.table`
GROUP BY user   

结果

Row user    ranking_max ranking_list     
1   a       14          10,12,14     
2   b       2           2    
3   c       22          22   
4   d       21          21   

注意:如果您需要订购 ranking_list - 您可以在 STRING_AGG 中使用 ORDER BY,如下所示

STRING_AGG(CAST(ranking AS STRING) ORDER BY ranking) ranking_list