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

Google bigquery 如何从bigquery中的多个记录创建数组?,google-bigquery,Google Bigquery,因为我是bigquery的新手,所以我正在为一些基本的东西而挣扎。该表包含145条记录。如何从表中创建数组。这是可下载的链接。可下载的文件为csv格式。我想知道每个学生及其学科的最高分数。我尝试了这个查询,结果成功了 WITH data AS (SELECT DISTINCT name, Physics, Chemistry, Maths, Biology FROM `[Your_Project].[Your_dataset].[Your_table]`) SELECT name,

因为我是bigquery的新手,所以我正在为一些基本的东西而挣扎。该表包含145条记录。如何从表中创建数组。这是可下载的链接。可下载的文件为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

多亏了莫妮卡的回答,我终于明白了你的问题: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

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

您已经尝试过了。告诉我们,我们可以帮助!顺便说一句,不清楚什么是预期的输出-请提供例子!请编辑您的问题以显示您遇到问题的代码,然后我们可以尝试帮助您解决特定问题。你也可以阅读:o) 很漂亮,很有魅力。但我有几个疑问。1.限制1建议了什么(限制通常用于减少记录,不是吗?这里显示了8条记录。)和2。这意味着什么呢?*这两个疑问现在已经清楚了。这里数组的名称是pair。按降序排列每条记录的配对,使得分最高的主题排在第一位,然后限制为1,从而选择第一组。)用于显示列名、最高标记和主题。例如,第一个记录:塞缪尔-->[(67,'物理'),(89,'化学'),(96,'数学'),(67,'生物')]->按配对顺序排列。最高分数描述-->[(96,'数学'),(89,'化学'),(67,'物理'),(67,'生物')]->限制1-->[(96,'数学')被选为-->).-->最高分数科目
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