Google bigquery 不与GROUP BY一起使用,并且具有
我们正在尝试合计所有订单收入,但我们没有注册付款成功事件。失败的订单失败的订单要么没有付款尝试,要么是付款失败事件Google bigquery 不与GROUP BY一起使用,并且具有,google-bigquery,Google Bigquery,我们正在尝试合计所有订单收入,但我们没有注册付款成功事件。失败的订单失败的订单要么没有付款尝试,要么是付款失败事件 SELECT o.campaign.id AS campaign_id, o.campaign.template_id AS campaign_template_id, o.campaign.lang AS language, o.campaign.split_idx AS campaign_split_id, count(distinct o.order_id) AS order
SELECT
o.campaign.id AS campaign_id,
o.campaign.template_id AS campaign_template_id,
o.campaign.lang AS language,
o.campaign.split_idx AS campaign_split_id,
count(distinct o.order_id) AS orders,
SUM(o.total) AS totalrevenue,
SUM(o.shipping_value) AS shipping_value
FROM [wr_live.order] AS o
GROUP BY campaign_id, campaign_template_id, language, campaign_split_id
HAVING
o.order_id NOT IN (
SELECT order_id
FROM [wr_live.order_event] as e
WHERE e.order_id = o.order_id AND e.event = 'payment' and e.status = 1
)
正如您所看到的,我们正在运行一个NOT IN子句,在该子句中,我们检查该特定订单是否没有任何付款事件,状态=1
我们有关于付费谷歌企业支持的案例05024161,但显然他们无法提供帮助。请注意,HAVING子句只能引用SELECT子句中定义的字段。如果字段有别名,则必须使用它;如果没有,请改用聚合字段名 在查询中,select子句中没有Order\u Id。 尝试将其放在GROUPBY之前的where子句中 比如:
SELECT
o.campaign.id AS campaign_id,
o.campaign.template_id AS campaign_template_id,
o.campaign.lang AS language,
o.campaign.split_idx AS campaign_split_id,
count(distinct o.order_id) AS orders,
SUM(o.total) AS totalrevenue,
SUM(o.shipping_value) AS shipping_value
FROM(
Select * from [wr_live.order]
Where order_id NOT IN (
SELECT order_id
FROM [wr_live.order_event] as e
WHERE e.event = 'payment' and e.status = 1
)
)AS o
GROUP BY campaign_id, campaign_template_id, language, campaign_split_id
此外,BQ不支持子查询引用父查询。如果您需要,请尝试替换为Join作为BigQuery团队的成员,我能够运行您的查询并尝试不同的方法。似乎只要删除对o.order_id的引用并修改一些字段名,它就可以在不加入反连接的情况下运行
SELECT
campaign.id AS campaign_id,
campaign.template_id AS campaign_template_id,
campaign.lang AS language,
campaign.split_idx AS campaign_split_id,
COUNT(DISTINCT order_id) AS orders,
SUM(total) AS totalrevenue,
SUM(shipping_value) AS shipping_value
FROM
[wr_live.order]
WHERE
order_id NOT IN (
SELECT
order_id
FROM
[wr_live.order_event]
WHERE
event = 'payment'
AND status = 1
)
GROUP BY
campaign_id,
campaign_template_id,
language,
campaign_split_id;
此查询在不到10秒内运行了几次。我不能保证它总是那么快,但你可能想试试。你能提供一个公共样本数据集来处理查询吗?@FelipeHoffa我已经与谷歌支持部门共享了该数据集。@FelipeHoffa显然你能调查一下为什么支持部门不能很快回答这个问题。另外,事实证明没有官方的BQ支持,你能确认吗?有支持,他们应该涵盖BigQuery。如果答案不令人满意,请通过支持升级。同时,我有有限的资源来进一步调查这个问题——我旅行时的连通性有限。正如您所见,这并不能阻止我偶尔查看StackOverflow,尽我所能提供帮助。@FelipeHoffa这里的答案是令人满意的,但支持在4天内无法帮助我。这是我想理解的。Mario告诉我他不是BQ的一员,他没有经验,看起来BQ没有人回答添加到付费企业支持的问题。我尝试了你的问题,结果是一样的:查询失败错误:在表“e”中找不到字段“o.order_id”;你是说“订单id”吗?我写这个是盲目的,没有真正的模式参考。。。显然我错过了什么。在我的编辑后检查。我在您的编辑后检查,仍然是相同的错误消息错误:在表“e”中找不到字段“o.order_id”;你是说“订单号”吗?作业ID:Aerovious-forge-504:Job_5XQTd_R8BUfAx1MlY80cRpetmyIBQ不支持子查询引用父查询。如果你需要它,试着用JoinIt替换它,它现在可以工作了,但是需要62.9秒的时间。
SELECT
campaign.id AS campaign_id,
campaign.template_id AS campaign_template_id,
campaign.lang AS language,
campaign.split_idx AS campaign_split_id,
COUNT(DISTINCT order_id) AS orders,
SUM(total) AS totalrevenue,
SUM(shipping_value) AS shipping_value
FROM
[wr_live.order]
WHERE
order_id NOT IN (
SELECT
order_id
FROM
[wr_live.order_event]
WHERE
event = 'payment'
AND status = 1
)
GROUP BY
campaign_id,
campaign_template_id,
language,
campaign_split_id;