如何在 BigQuery 中过滤多个条件?
How to filter multiple conditions in BigQuery?
我想用 2 个条件过滤我的 table:
- ride_length 必须大于 31
- 对于start_station_name和end_station_name相同的行程,ride_length必须大于60
我尝试使用如下子查询查询代码:
SELECT
TIMESTAMP_DIFF(ended_at,started_at,SECOND) AS ride_length,
start_station_name,
end_station_name
FROM
divvy_stations_trips.all_trips
WHERE
TIMESTAMP_DIFF(ended_at,started_at,SECOND) > 31 AND
(SELLECT
TIMESTAMP_DIFF(ended_at,started_at,SECOND)
FROM
divvy_stations_trips.all_trips
WHERE
TIMESTAMP_DIFF(ended_at,started_at,SECOND)>60 AND
start_station_name = end_station_name
)
我收到此错误:语法错误:带括号的表达式无法解析为 [10:9]
处的表达式、结构构造函数或子查询
我的子查询好像有问题?如果有人能提供帮助,我们将不胜感激!
提前致谢!
您创建的子查询不能在 WHERE 子句中使用。
一种方法是使用 UNION
合并两组结果。
这应该有效:
(SELECT
TIMESTAMP_DIFF(ended_at,started_at,SECOND) AS ride_length,
start_station_name,
end_station_name
FROM
divvy_stations_trips.all_trips
WHERE
TIMESTAMP_DIFF(ended_at,started_at,SECOND) > 31 AND
start_station_name != end_station_name)
UNION ALL
(SELECT
TIMESTAMP_DIFF(ended_at,started_at,SECOND) AS ride_length,
start_station_name,
end_station_name
FROM
divvy_stations_trips.all_trips
WHERE
TIMESTAMP_DIFF(ended_at,started_at,SECOND) > 60 AND
start_station_name = end_station_name)
我想用 2 个条件过滤我的 table:
- ride_length 必须大于 31
- 对于start_station_name和end_station_name相同的行程,ride_length必须大于60
我尝试使用如下子查询查询代码:
SELECT
TIMESTAMP_DIFF(ended_at,started_at,SECOND) AS ride_length,
start_station_name,
end_station_name
FROM
divvy_stations_trips.all_trips
WHERE
TIMESTAMP_DIFF(ended_at,started_at,SECOND) > 31 AND
(SELLECT
TIMESTAMP_DIFF(ended_at,started_at,SECOND)
FROM
divvy_stations_trips.all_trips
WHERE
TIMESTAMP_DIFF(ended_at,started_at,SECOND)>60 AND
start_station_name = end_station_name
)
我收到此错误:语法错误:带括号的表达式无法解析为 [10:9]
处的表达式、结构构造函数或子查询我的子查询好像有问题?如果有人能提供帮助,我们将不胜感激!
提前致谢!
您创建的子查询不能在 WHERE 子句中使用。
一种方法是使用 UNION
合并两组结果。
这应该有效:
(SELECT
TIMESTAMP_DIFF(ended_at,started_at,SECOND) AS ride_length,
start_station_name,
end_station_name
FROM
divvy_stations_trips.all_trips
WHERE
TIMESTAMP_DIFF(ended_at,started_at,SECOND) > 31 AND
start_station_name != end_station_name)
UNION ALL
(SELECT
TIMESTAMP_DIFF(ended_at,started_at,SECOND) AS ride_length,
start_station_name,
end_station_name
FROM
divvy_stations_trips.all_trips
WHERE
TIMESTAMP_DIFF(ended_at,started_at,SECOND) > 60 AND
start_station_name = end_station_name)