大查询,错误:标量子查询产生了多个元素

Posted

技术标签:

【中文标题】大查询,错误:标量子查询产生了多个元素【英文标题】:Big Query, Error: Scalar subquery produced more than one element 【发布时间】:2018-07-24 13:46:25 【问题描述】:

我有一个查询遇到此错误消息: 错误:标量子查询产生了多个元素

我想加入代表在不同时间段发生的行为的表格,但正常的加入似乎不起作用:

选择 a.g, count(*) from

(选择user_id作为用户,

(选择 x.value.string_value from analytics_156934592.events_20180701, unnest(event_params) as x where x.key = 'group') as g,

(选择 x.value.string_value from analytics_156934592.events_20180701, unnest(event_params) as x where x.key = 'operation') 作为操作

来自analytics_156934592.events_20180701 其中 event_name = 'book_now')a

加入

(选择user_id作为用户,

(选择 x.value.string_value from analytics_156934592.events_20180702, unnest(event_params) as x where x.key = 'operation') 作为操作

来自analytics_156934592.events_20180702 其中 event_name = 'book_now')b

a.user = b.user

其中 a.operation = 'no_car' 和 b.operation = 'confirm'

按 a.g 分组

不确定这是否是使用 Big Query 标准 Sql 进行联接的正确方法 以前类似问题的解决方案也对我不起作用。

感谢您的帮助!

【问题讨论】:

错误信息很清楚,您在 select 子句中的一个或多个子查询正在生成多个值。一定有比现在更好的方法来制定您的查询。 简化您的查询并找出问题所在。 您可以在子查询中使用前 1 来解决问题,但您需要详细检查这些子查询,因为您可能会得到错误的数据 谢谢大家!我得到了如下解决方案。 【参考方案1】:

谢谢大家!

我从朋友那里得到了一个解决方案,并且是可行的:

select count(distinct a.user), count(distinct b.user_id)
from

(select
user_id as user

from `analytics_156934592.events_20180707`
join unnest(event_params) as x
join unnest(event_params) as y
where event_name = 'book_now'
and x.key = 'group'
and x.value.string_value = 'a'
and y.key = 'operation'
and y.value.string_value = 'no_car')a 

left join

(select
user_id , event_date

from `analytics_156934592.events_*` 
join unnest(event_params) as y
where event_name = 'launcher'
and y.key = 'operation'
and y.value.string_value = 'show'
AND REGEXP_EXTRACT(_TABLE_SUFFIX, r'(\d+)') BETWEEN '20180708' and '20180720')b 

on a.user = b.user_id

【讨论】:

以上是关于大查询,错误:标量子查询产生了多个元素的主要内容,如果未能解决你的问题,请参考以下文章

大查询 - 用户定义函数 - 标量子查询错误

子查询优化

mysql 标量子查询和非法子查询

Bigquery UDF 重复查询。错误:标量子查询不能超过一列

5.7 进阶7:子查询

mysql子查询