gpt4 book ai didi

sql - 如何按同一查询中生成的列进行过滤?

转载 作者:行者123 更新时间:2023-12-05 02:56:47 25 4
gpt4 key购买 nike

下面是一个非常简单的查询,其中 my_data 仅包含 1 行,它只是为了帮助我更好地解释我的问题。

WITH

my_data AS(
SELECT
TIMESTAMP("2020-02-11 13:15:00 UTC") AS my_timestamp
,50 AS my_customers)

SELECT
DATE(my_timestamp) AS my_date
,my_customers
FROM
my_data
WHERE
my_date = "2020-02-11"

这不会在 Google Big Query 的标准 SQL 中运行,尽管我记得过去运行过类似的东西。它不会运行的原因是它不知道 my_date 是什么,我的猜测是因为它是在同一个查询中创建的。

我的问题是:

  1. 我能否按新生成的列进行过滤,该列是在同一查询中生成的,但在我的表 (my_data) 中不存在?
  2. 这是正确的做法还是错误的做法?

一种解决方法是先创建 my_data 而不使用该过滤器,但使用额外的列 my_date 并稍后通过再次检查它来过滤它。

谢谢

最佳答案

我想开始回答您提出的问题。

  1. 不可以,您不能按刚刚在 select 语句中创建的新生成的列别名进行过滤,稍后我会解释原因。

  2. 另一方面,您正确地使用了 CLE(以 WITH 开头的部分)来过滤后续 SELECT 中的数据。问题是你引用了错误的东西。

在第一部分,您刚刚创建了一个名为 "my_data" 的新表,该表包含两列:my_timestampmy_customer。您随后可以查询该表并按时间戳进行过滤,唯一的问题是您不能在 WHERE 子句的 SELECT 语句中使用您创建的别名。这是因为 SQL 运算符的运行有一定的顺序。

在这种情况下,您在 where 子句中使用别名 "my_date"WHERESELECT 子句之前处理,因此,WHERE 子句不知道 "my_date" 是什么,这就是您收到有关“my_date”的错误的原因。

我不确定在 BigQuery 中进行解析,以前从未使用过它,但假设您对日期的解析是正确的。您的查询唯一需要更改的是 DATE(my_timestamp)

的 where 子句中更改 "my-date"
WITH
my_data AS(
SELECT
TIMESTAMP("2020-02-11 13:15:00 UTC") AS my_timestamp,
50 AS my_customers)
SELECT
DATE(my_timestamp) AS my_date,
my_customers
FROM
my_data
WHERE
DATE(my_timestamp) = "2020-02-11"

在下面找到我之前提到的 SQL 操作顺序。在设计查询时考虑这一点始终至关重要。

  1. 来自
  2. 哪里
  3. 分组依据
  4. 拥有
  5. 选择
  6. 订购方式

希望这对您有所帮助。

关于sql - 如何按同一查询中生成的列进行过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60169635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com