【问题标题】:Scalar subquery produced more than one element - Standard SQL标量子查询产生了多个元素 - 标准 SQL
【发布时间】:2019-01-30 23:47:50
【问题描述】:

我的查询失败并显示消息“标量子查询产生了多个元素”

  SELECT 
       EXTRACT (DATE FROM timestamp) AS Date
       ,jsonPayload.request.headers.origin AS URL
       ,jsonPayload.response.body.json.data.country.key AS Country
       ,(SELECT A.name FROM `pms_table_request_log.partners_request_log_*`, 
       UNNEST(jsonPayload.response.body.data.rows) AS A) AS Partner
       ,AVG((SELECT B.rating 
  FROM 
    `pms_table_request_log.partners_request_log_*`, 
     UNNEST(jsonPayload.response.body.data.rows) AS B)) AS Rating
    ,COUNT (*) AS Impression
    FROM 
       `pms_table_request_log.partners_request_log_*`
    GROUP BY 
        Date,URL,Country,Partner
    ORDER BY 
        Impression DESC;

请指导我做错了什么

【问题讨论】:

    标签: google-bigquery bigquery-standard-sql


    【解决方案1】:

    您的子查询产生的不是一个元素,而是多个元素。当只有一个元素的空间时,BQ 不知道如何处理多个元素。

    您可以将结果输入到数组中,而数组本身又只是一个元素。 您可以聚合或限制子查询的输出。 例如

    (SELECT STRING_AGG(DISTINCT A.name) FROM `pms_table_request_log.partners_request_log_*`, 
           UNNEST(jsonPayload.response.body.data.rows) AS A) AS Partner
    

    (SELECT AVG(B.rating) 
      FROM 
        `pms_table_request_log.partners_request_log_*`, 
         UNNEST(jsonPayload.response.body.data.rows) AS B)) AS Rating
    

    作为聚合示例。

    用于限制:

    (SELECT A.name FROM `pms_table_request_log.partners_request_log_*`, 
           UNNEST(jsonPayload.response.body.data.rows) AS A LIMIT 1) AS Partner
    

    不过,正确的选择取决于数据的含义。希望有帮助

    【讨论】:

    • 感谢您的快速回复。我设法以稍微不同的方式做到了。 SELECT EXTRACT (DATE FROM timestamp) AS DATE ,A.name ,jsonPayload.request.headers.origin AS URL ,jsonPayload.response.body.data.country.key AS Country ,AVG(A.rating) AS Rating ,COUNT (* ) 作为来自pms_table_request_log.partners_request_log_* 的印象,UNNEST(jsonPayload.response.body.data.rows) 作为按时间戳、名称、URL、国家/地区顺序按印象 DESC 分组;
    • 当然,如果您确实需要数据中的非聚合值,那么扁平化将是可行的方法。但我的回答是指你的问题。
    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多