如何从bigquery中的许多记录创建数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从bigquery中的许多记录创建数组?相关的知识,希望对你有一定的参考价值。

由于我是bigquery的新手,我正在努力解决基本问题。该表包含145条记录。如何从表中创建数组。这是可下载的链接https://drive.google.com/uc?export=download&id=1SvkAN8sqS7WnsBO-X3UnyXI8sen5TOZ0。可下载文件采用csv格式。我想知道每个学生及其科目的最高分。

答案

我尝试了这个查询,但它确实有效。

WITH data AS (SELECT DISTINCT name, Physics, Chemistry, Maths, Biology
  FROM `[Your_Project].[Your_dataset].[Your_table]`)
SELECT
  name,
  (CASE
  WHEN Physics >= Chemistry AND Physics >= Maths AND Physics >= Biology THEN Physics
  WHEN Chemistry >= Physics  AND Chemistry >= Maths AND Chemistry >= Biology THEN Chemistry
  WHEN Maths >= Physics AND Maths >= Chemistry AND Maths >= Biology THEN Maths
  WHEN Biology >= Physics AND Biology >= Chemistry AND Biology >= Maths THEN Biology
  ELSE Physics
  END) AS maxmark, 
  (CASE
   WHEN Physics >= Chemistry AND Physics >= Maths AND Physics >= Biology THEN 'Physics'
   WHEN Chemistry >= Physics  AND Chemistry >= Maths AND Chemistry >= Biology THEN 'Chemistry'
   WHEN Maths >= Physics AND Maths >= Chemistry AND Maths >= Biology THEN 'Maths'
   WHEN Biology >= Physics AND Biology >= Chemistry AND Biology >= Maths THEN 'Biology'
   ELSE 'Physics'
   END) as field
FROM
  data
另一答案

感谢Monica的回答,我终于得到了你的问题:o)

我注意到可下载链接中的数据只是一堆重复的行,因此如果仅使用简单的DISTINCT对它们进行重复数据删除,则最终只有8行。所以那部分还不清楚

但是,如果忽略这方面,获得最高分和各自主题的方式如下。它回答了你提出的两个问题:

1 - 如何从表中创建数组 2 - 如何获得每个学生及其科目的最高分

#standardSQL
WITH data AS (
  SELECT DISTINCT name, Physics, Chemistry, Maths, Biology
  FROM `project.dataset.table`
)
SELECT name, 
  (
    SELECT pair
    FROM UNNEST([STRUCT<highest_mark INT64, subject STRING>
      (Physics, 'Physics'), 
      (Chemistry, 'Chemistry'), 
      (Maths, 'Maths'), 
      (Biology, 'Biology')
    ]) pair
    ORDER BY pair.highest_mark DESC
    LIMIT 1
  ).* 
FROM data

如果要将上面的数据应用于表格 - 以下是结果

Row name    highest_mark    subject  
1   Samuel  96              Maths    
2   David   90              Physics  
3   Mark    90              Physics  
4   John    94              Physics  
5   Mathew  94              Physics  
6   Andrew  97              Physics  
7   James   97              Physics  
8   Peter   98              Chemistry     

我认为这个解决方案比使用分支CASE时更具可读性和可管理性......

以上是关于如何从bigquery中的许多记录创建数组?的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 对数组类型的许多字段的最佳查询

如何从对象创建可用的数组

如何从 BigQuery 中的 JSON 字符串中提取数组

如何从基于嵌套 json 的 BigQuery 表中进行选择?

如何比较标准 SQL(BigQuery)中的两个数组?

如何在 Google BigQuery 中的数组中的元素上创建表连接