【问题标题】:Using more than one field with IN ( ) for a sub-query对子查询使用多个带有 IN ( ) 的字段
【发布时间】:2015-06-22 19:03:07
【问题描述】:

在 Google BigQuery 中,我必须执行以下操作:

SELECT hits.item.productName
FROM [‘Dataset Name’ ]
WHERE date, visitId, fullVisitorId IN (
  SELECT date, visitId, fullVisitorId
  FROM [‘Dataset Name’ ]
  WHERE hits.item.productName CONTAINS 'Product Item Name A'
  AND totals.transactions>=1)

但是,这似乎不受支持。除了使用 JOIN 之外,我还有哪些选择?

【问题讨论】:

    标签: google-analytics google-bigquery


    【解决方案1】:

    改为执行 JOIN。

    相当于:

    SELECT COUNT(*), stn, a.wban, FIRST(name) name, FIRST(country) country
    FROM [fh-bigquery:weather_gsod.gsod2014] a
    WHERE stn, wban IN
      (SELECT usaf, wban FROM [fh-bigquery:weather_gsod.stations] WHERE country='UK')
    GROUP BY 2, 3
    ORDER BY 1 DESC
    

    应该是:

    SELECT COUNT(*), stn, a.wban, FIRST(name) name, FIRST(country) country
    FROM [fh-bigquery:weather_gsod.gsod2014] a
    JOIN [fh-bigquery:weather_gsod.stations] b
    ON a.stn=b.usaf AND a.wban=b.wban
    WHERE country='UK'
    GROUP BY 2, 3
    ORDER BY 1 DESC
    

    【讨论】:

    • 感谢您的回复。我知道 JOIN 有效,但没有其他选择吗?
    • 一个非常丑陋的替代方案是连接 date、visitId 和 fullVisitorId 的值。我也想避免这种情况。
    • 在幕后,IN 子句被实现为半连接,因此通过显式使用 JOIN 确实不会丢失任何东西。
    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多