【问题标题】:How to concat rows based on ID,如何根据 ID 连接行,
【发布时间】:2019-05-30 19:32:25
【问题描述】:

在 bigquery 中使用标准 SQL:

给定一个表格,例如:其中的值已被计算,因此只出现一次

| id | key | value |
--------------------
| 1 | read |  aa   |
| 1 | read |  bb   |
| 1 | name |  abc  |
| 2 | read |  bb   |
| 2 | read |  cc   |
| 2 | name |  def  |
| 2 | value|  some |
| 3 | read |  aa   | 

我怎样才能使每一行都是一个用户及其各自的值?例如巢

所以表格看起来像:

| id | key | value |
--------------------
| 1 | read |  aa   |
|   | read |  bb   |
|   | name |  abc  |
| 2 | read |  bb   |
|   | read |  cc   |
|   | name |  def  |
|   | value|  some |
| 3 | read |  aa   | 

我尝试在列上使用ARRAY_AGG,最终列出了该列的所有值。

我只需要将每一行作为具有多个值的单个用户,如上所示。

就像 BigQuery 在这里所做的那样,这就是我想要的样子:

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    SELECT id, ARRAY_AGG(STRUCT(key AS key, value AS value)) params
    FROM `project.dataset.table`
    GROUP BY id  
    

    如果应用于您的示例数据 - 结果是

    【讨论】:

    • Hero,你又帮了我,没有意识到我必须将它与 STRUCT 结合起来,阅读文档后才有意义。上周我一直在努力学习标准 SQL,我是一名后端开发人员,很快就会将团队转移到我需要它的地方。有什么资源可以推荐吗?
    • 我认为,BQ doc 相当不错。遇到困难时,请继续阅读、尝试和提问:o)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2015-07-04
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多