简体   繁体   English

Bigquery Join 语法错误与适用于标准 SQL 的示例代码

[英]Bigquery Join syntax errors with example code that works in standard SQL

I am using big query and looking to find the toalAfterRefund value of the first order of an emailAddress.我正在使用大查询并希望找到 emailAddress 的第一个订单的 toalAfterRefund 值。 Both these select statements work as individual statements, but I'm having trouble joining them.这两个 select 语句都作为单独的语句工作,但我在加入它们时遇到了麻烦。 I get the error我得到错误

Syntax error: Expected end of input but got keyword JOIN at [1:1]

I'm having trouble understanding what I need to do to join these as these statements together in bigquery.我无法理解在 bigquery 中将这些语句作为这些语句连接在一起需要做什么。 I am trying to get the toalAfterRefund value of the emailAddresses first orderDate.我正在尝试获取 emailAddresses 第一个 orderDate 的 toalAfterRefund 值。

SELECT  H.emailAddress, H.orderId, H.orderDate, H.totalAfterRefund
           FROM  `nexgen-362616.orders.allOrders` AS H
          WHERE   totalAfterRefund>0 
          
JOIN
          (SELECT emailAddress, MIN(OrderDate) AS first_order
          FROM  `nexgen-362616.orders.allOrders` as X
          WHERE   totalAfterRefund>0 
          GROUP BY emailAddress) 
          ON H.emailAddress = X.emailAddress AND H.orderDate = X.first_order
WITH table_emailAddress as
(SELECT emailAddress, MIN(OrderDate) AS first_order
          FROM  `nexgen-362616.orders.allOrders` as X
          WHERE   totalAfterRefund>0 
          GROUP BY emailAddress) 

SELECT  H.emailAddress, H.orderId, H.orderDate, H.totalAfterRefund
           FROM  `nexgen-362616.orders.allOrders` AS H
       
          
JOIN table_emailAddress  as X
     
          ON H.emailAddress = X.emailAddress AND H.orderDate = X.first_order

   WHERE   totalAfterRefund>0 

You have multiple problem in our code,您在我们的代码中有多个问题,

  1. WHERE clause belongs always at the end WHERE 子句总是在最后
  2. every subquery must have its own name每个子查询必须有自己的名字

so所以

SELECT  H.emailAddress, H.orderId, H.orderDate, H.totalAfterRefund, X.first_order
           FROM  `nexgen-362616.orders.allOrders` AS H          
JOIN
          (SELECT emailAddress, MIN(OrderDate) AS first_order
          FROM  `nexgen-362616.orders.allOrders`
          WHERE   totalAfterRefund>0 
          GROUP BY emailAddress)  as X
          ON H.emailAddress = X.emailAddress AND H.orderDate = X.first_order
WHERE   totalAfterRefund>0 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM