Bigquery在单个选择中多次取消嵌套

Sub*_*bah 4 google-bigquery

后续 - Bigquery 组合来自 2 个不同表的重复字段

@ElliottBrossard 的上述解决方案正是我所寻找的。谢谢!我需要从上面取消嵌套字段以获取学生的聚合。比如说,有一个额外的成本字段(每门课程)例如假设上面在 Student_courses 表中的输出,我需要做类似的事情,

SELECT
  COUNT(DISTINCT phone.number),
  COUNT(DISTINCT courses.Id),
  SUM(courses.Cost)
FROM
  student_courses,
  UNNEST(phone),
  UNNEST(courses)
Run Code Online (Sandbox Code Playgroud)

我对上面的预期答案是 3、4、800 美元(假设 4 门课程每门课程花费 200 美元)。上面的查询最终就像交叉连接一样。是否可以使用单个 Select 从多个嵌套中获取聚合?

Ell*_*ard 6

这是一个想法,虽然有点冗长:

#standardSQL
SELECT
  (SELECT COUNT(DISTINCT number)
   FROM UNNEST(numbers) AS number),
  (SELECT COUNT(DISTINCT course_id)
   FROM UNNEST(course_ids) AS course_id),
  course_sum
FROM (
  SELECT
    ARRAY_CONCAT_AGG(
      ARRAY(SELECT number FROM UNNEST(phone))
    ) AS numbers,
    ARRAY_CONCAT_AGG(
      ARRAY(SELECT id FROM UNNEST(courses))
    ) AS course_ids,
    SUM((SELECT SUM(cost) FROM UNNEST(courses))) AS course_sum
  FROM YourTable
);
Run Code Online (Sandbox Code Playgroud)

参考: