Проблемы с запросом таблиц в нескольких наборах данных в bigquery - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь запросить две таблицы bigquery из двух разных наборов данных, чтобы получить 2 отдельных столбца. Я пробовал и объединение, и объединение, но они не дают мне того, что мне нужно. Ниже приведен запрос, который я пробовал

with abagrowth as (
SELECT
  session abas,
  term abat,
  COUNT(distinct studentid) AS acount,
  ROUND(100 * (COUNT(distinct studentid) - LAG(COUNT(distinct studentid), 1) OVER (ORDER BY session)) / LAG(COUNT(distinct studentid), 1) OVER (ORDER BY session),0) || '%' AS agrowth
FROM
  aba.abaresult
GROUP BY
  1,
  2
ORDER BY
  1,
  2),

bidagrowth as (
SELECT
  session bidas,
  term bidat,
  COUNT(distinct studentid) AS bcount,
  ROUND(100 * (COUNT(distinct studentid) - LAG(COUNT(distinct studentid), 1) OVER (ORDER BY session)) / LAG(COUNT(distinct studentid), 1) OVER (ORDER BY session),0) || '%' AS bgrowth
FROM
  bida.bidaresult
GROUP BY
  1,
  2
ORDER BY
  1,
  2)

select abas, agrowth from abagrowth
union all
select bidas, bgrowth from bidagrowth

Набор данных похож на этот

name  subject  session      totalscore
-------------------------------------------
jack  maths    2013/2014         70
jane  maths    2013/2014         65
jill  maths    2013/2014         80
jack  maths    2014/2015         72
jack  eng      2014/2015         87
jane  science  2014/2015         67
jill  maths    2014/2015         70
jerry eng      2014/2015         70
jaasp science  2014/2015         85

Таблица, которую я пытаюсь получить, предназначена для этого формата или чего-то подобного

session    agrowth  bgrowth
2013/2014   null     null
2014/2015   10%       11%
2015/2016   5%        2%

Приведенные выше цифры приняты для примера сакэ.

Вопросы

  1. Возможно ли это с помощью bigquery?

  2. Если да, то как этого добиться?

Спасибо

1 Ответ

1 голос
/ 25 мая 2020

По поводу набора данных. Да, вы можете запросить два набора данных. Проверьте этот ответ . По сути, вам просто нужно указать проект (необязательно), набор данных и таблицу, которые вы используете.

Для данных, которые вы хотите получить. Вы можете добиться этого с помощью JOIN, а не UNION. СОЕДИНЕНИЕ таблиц по сеансам позволит вам иметь одну строку за сеанс. Затем вы можете выбрать, какие столбцы включить в ваш SELECT.

WITH abagrowth AS (
SELECT
  session,
  term abat,
  COUNT(distinct studentid) AS acount,
  ROUND(100 * (COUNT(distinct studentid) - LAG(COUNT(distinct studentid), 1) OVER (ORDER BY session)) / LAG(COUNT(distinct studentid), 1) OVER (ORDER BY session),0) || '%' AS agrowth
FROM
  aba.abaresult
GROUP BY
  1,
  2
ORDER BY
  1,
  2),

bidagrowth AS (
SELECT
  session,
  term bidat,
  COUNT(distinct studentid) AS bcount,
  ROUND(100 * (COUNT(distinct studentid) - LAG(COUNT(distinct studentid), 1) OVER (ORDER BY session)) / LAG(COUNT(distinct studentid), 1) OVER (ORDER BY session),0) || '%' AS bgrowth
FROM
  bida.bidaresult
GROUP BY
  1,
  2
ORDER BY
  1,
  2)

SELECT aba.session, aba.agrowth, bida.bgrowth
   FROM abagrowth aba
   JOIN bidagrowth bida
        ON aba.session = bida.session

UNION будет складывать результаты двух запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...