【发布时间】:2016-05-12 11:26:09
【问题描述】:
我正在使用 BigQuery。我有两张桌子:
organisations:
org_code STRING
name STRING
spending:
org STRING
month DATE
quantity INTEGER
code STRING
然后是一个相当复杂的查询,以按月按每个组织获取结果:
SELECT
organisations.org_code AS org,
num.month AS month,
(num.quantity / denom.quantity) AS ratio_quantity
FROM (
SELECT
org_code, name
FROM
[mytable.organisations]) AS organisations
LEFT OUTER JOIN EACH (
SELECT
org,
month,
SUM(quantity) AS quantity
FROM
[mytable.spending]
GROUP BY
org,
month) AS denom
ON
denom.org = organisations.org_code
LEFT OUTER JOIN EACH (
SELECT
org,
month,
SUM(quantity) AS quantity
FROM
[hscic.spending]
WHERE
code LIKE 'XXXX%'
GROUP BY
org,
month) AS num
ON
denom.month = num.month
AND denom.org = num.org
ORDER BY org, month
我的最终结果如下所示,每个组织/月组合一行:
org,month,ratio_quantity
A81001,2015-10-01 00:00:00 UTC,28
A82001,2015-11-01 00:00:00 UTC,43
A82002,2015-10-01 00:00:00 UTC,16
现在我想将结果转为如下所示,每月一行,每个组织一列:
month,items.A81001,items.A82002...
2015-10-01 00:00:00 UTC,28,16
2015-11-01 00:00:00 UTC,43,...
这可以在同一个 BigQuery 调用中实现吗?或者我应该创建一个新表并从那里旋转它?还是应该只用 Python 进行整形?
更新:大约有 500,000 个结果,仅供参考。
【问题讨论】:
-
一个在不使用 UDF 的情况下模拟 pandas.melt() 函数的查询:stackoverflow.com/a/62057616/13632099
标签: sql google-bigquery