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