【问题标题】:In what order SQL statement execute if Select statement has CONCAT function on some columns?如果 Select 语句在某些列上有 CONCAT 函数,SQL 语句以什么顺序执行?
【发布时间】:2019-06-23 23:15:45
【问题描述】:

我一直在尝试理解 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 语句的顺序将如何执行。主要是当对 unique_session_id(即两列之间的 CONCAT)进行 GROUP BY 时,“GROUP BY”如何知道计算出的 CONCAT 结果(unique_session_id)。据我所知,SELECT 语句将在最后运行。但在这种情况下,似乎第一个字段是使用 CONCAT 计算的,然后 group by 使用它进行分组。有人可以对此提供更多见解吗?

【问题讨论】:

  • 通常GROUP BY 是运行的最后步骤之一(HAVING 和一些其他供应商特定的条款如下)。在阳光下的每个 RDBMS 上都是如此。

标签: sql google-bigquery


【解决方案1】:

根据 SQL 标准,GROUP BYSELECT 之前被解析

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2018-02-18
    • 1970-01-01
    • 2014-12-23
    • 2011-02-06
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多