SQL Big Query - 如何编写应用于 INTERVAL 列的 COUNTIF 语句
SQL Big Query - How to write a COUNTIF statement applied to an INTERVAL column
我有一个间隔格式的 trip_duration 列。我想删除所有小于 90 秒的观察结果,并计算有多少观察结果符合此条件。
我当前的SQL查询是
WITH
org_table AS (
SELECT
ended_at - started_at as trip_duration
FROM `cyclistic-328701.12_month_user_data_cyclistic.20*`
)
SELECT
COUNTIF(x < 1:30) AS false_start
FROM trip_duration AS x;
I returns 语法错误:应为“)”但在 [8:16]
得到了“:”
我也试过了
SELECT
COUNTIF(x < "0-0 0 0:1:30") AS false_start
FROM trip_duration AS x
它 returns Table name "trip_duration" 缺少数据集,而请求中没有设置默认数据集。
我已经通读了其他问题,但未能写出解决方案。
我的第一个想法是将 trip_duration 从 INTERVAL 转换为 TIME 格式,这样 COUNT IF 语句就可以引用 TIME 格式的列而不是 INTERVAl。
~马库斯
要过滤持续时间不小于 90 秒的数据:
SELECT
* # here is whatever field(s) you want to return
FROM
`cyclistic-328701.12_month_user_data_cyclistic.20*`
WHERE
TIMESTAMP_DIFF(ended_at, started_at, SECOND) > 90
您可以阅读 TIMESTAMP_DIFF 函数 here。
计算出现次数:
SELECT
COUNTIF(TIMESTAMP_DIFF(ended_at, started_at,SECOND) < 90) AS false_start,
COUNTIF(TIMESTAMP_DIFF(ended_at, started_at,SECOND) >= 90) AS non_false_start
FROM
`cyclistic-328701.12_month_user_data_cyclistic.20*`
下面的例子展示了处理间隔的方法
with trip_duration as (
select interval 120 second as x union all
select interval 10 second union all
select interval 2 minute union all
select interval 50 second
)
select
count(*) as all_starts,
countif(x < interval 90 second) as false_starts
from trip_duration
有输出
我有一个间隔格式的 trip_duration 列。我想删除所有小于 90 秒的观察结果,并计算有多少观察结果符合此条件。
我当前的SQL查询是
WITH
org_table AS (
SELECT
ended_at - started_at as trip_duration
FROM `cyclistic-328701.12_month_user_data_cyclistic.20*`
)
SELECT
COUNTIF(x < 1:30) AS false_start
FROM trip_duration AS x;
I returns 语法错误:应为“)”但在 [8:16]
得到了“:”我也试过了
SELECT
COUNTIF(x < "0-0 0 0:1:30") AS false_start
FROM trip_duration AS x
它 returns Table name "trip_duration" 缺少数据集,而请求中没有设置默认数据集。
我已经通读了其他问题,但未能写出解决方案。 我的第一个想法是将 trip_duration 从 INTERVAL 转换为 TIME 格式,这样 COUNT IF 语句就可以引用 TIME 格式的列而不是 INTERVAl。
~马库斯
要过滤持续时间不小于 90 秒的数据:
SELECT
* # here is whatever field(s) you want to return
FROM
`cyclistic-328701.12_month_user_data_cyclistic.20*`
WHERE
TIMESTAMP_DIFF(ended_at, started_at, SECOND) > 90
您可以阅读 TIMESTAMP_DIFF 函数 here。
计算出现次数:
SELECT
COUNTIF(TIMESTAMP_DIFF(ended_at, started_at,SECOND) < 90) AS false_start,
COUNTIF(TIMESTAMP_DIFF(ended_at, started_at,SECOND) >= 90) AS non_false_start
FROM
`cyclistic-328701.12_month_user_data_cyclistic.20*`
下面的例子展示了处理间隔的方法
with trip_duration as (
select interval 120 second as x union all
select interval 10 second union all
select interval 2 minute union all
select interval 50 second
)
select
count(*) as all_starts,
countif(x < interval 90 second) as false_starts
from trip_duration
有输出