如果Select语句在某些列上具有CONCAT功能,则按什么顺序执行SQL语句?

时间:2019-01-30 15:56:50

标签: sql google-bigquery

我一直在尝试理解Coursera上BigQuery课程的一部分的代码。查询看起来像这样

   SELECT 
   CONCAT(fullVisitorId, CAST(visitID AS STRING)) AS unique_session_id,
   sessionQualityDim,
   SUM(productRevenue) AS transactions_revenue

   FROM
   transaction_table
   WHERE sessionQualityDim > 60
   GROUP BY unique_session_id, sessionQualityDim

我的问题是,SQL语句的顺序将如何执行。主要是当GROUP BY在unique_session_id(这是两列之间的CONCAT)上完成时,“ GROUP BY”将如何知道计算出的CONCAT结果(unique_session_id)。据我所知,SELECT语句将在最后运行。但是在这种情况下,似乎第一个字段是使用CONCAT计算的,然后使用该字段进行分组。有人可以对此提供更多见解吗?

1 个答案:

答案 0 :(得分:4)

根据SQL标准,在GROUP BY之前解析SELECT

但是,这并不是数据库之间的一成不变的规则。 BigQuery正在做的是从SELECT确定列别名。然后,它在GROUP BY中允许这些别名。其他数据库也可以这样做-例如Postgres及其所有派生数据库。

不过,请不要将查询的解析与执行混淆。通过一些非常复杂的并行有向无环图来执行。此处发生的仅仅是,BigQuery解析器(方便地)允许用户使用GROUP BY中的表别名。