在 bigquery 中查询多个数据集中的表时遇到问题
Trouble querying tables in multiple datasets in bigquery
我正在尝试从两个不同的数据集中查询两个 bigquery table 以获得 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
我想得到的 table 应该是这种格式或类似的格式
session agrowth bgrowth
2013/2014 null null
2014/2015 10% 11%
2015/2016 5% 2%
以上数字是为了举例而假定的。
问题
bigquery 可以吗?
如果是,如何实现?
谢谢
关于数据集。是的,您可以查询两个数据集。查看 。基本上,您只需要指出您正在使用的项目(可选)、数据集和 table。
对于您要获取的数据。您可以使用 JOIN 而不是 UNION 来实现它。按会话加入 table 将允许您在每个会话中有一行。然后您可以选择要包含在 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 将叠加两个查询的结果。
我正在尝试从两个不同的数据集中查询两个 bigquery table 以获得 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
我想得到的 table 应该是这种格式或类似的格式
session agrowth bgrowth
2013/2014 null null
2014/2015 10% 11%
2015/2016 5% 2%
以上数字是为了举例而假定的。
问题
bigquery 可以吗?
如果是,如何实现?
谢谢
关于数据集。是的,您可以查询两个数据集。查看
对于您要获取的数据。您可以使用 JOIN 而不是 UNION 来实现它。按会话加入 table 将允许您在每个会话中有一行。然后您可以选择要包含在 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 将叠加两个查询的结果。