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

时间:2018-02-28 16:42:16

标签: google-bigquery

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

2 个答案:

答案 0 :(得分:1)

感谢莫妮卡的回答,我终于得到了你的问题: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那时更具可读性和可管理性......

答案 1 :(得分:0)

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

var arrStudents = [s1, s2, s3, s4, s5]


if let index = arrStudents.index(where: {$0.id == 1}) // Search id = 1 you can set any value 
{
    arrStudents.remove(at: index)
}