Google bigquery 如何从bigquery中的多个记录创建数组?
因为我是bigquery的新手,所以我正在为一些基本的东西而挣扎。该表包含145条记录。如何从表中创建数组。这是可下载的链接。可下载的文件为csv格式。我想知道每个学生及其学科的最高分数。我尝试了这个查询,结果成功了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,
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