如何从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中的许多记录创建数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中从字节数组(在 BIG-ENDIAN 中)中提取单个字段

使用 Big Query,我如何在一条记录中查询多个对象?

如何将字节数组附加到Go中的字节片[重复]

Big Query:如何提取数据集的每个表创建时间?

如何从创建的列中选择最新记录

如何从 Swift 中的 Big-endian 表示中计算 Int 值?