Big Query SQL:如何对INTERVAL类型列编写COUNTIF条件统计语句
解决方案
报错根因
- 语法错误:你写的
1:30不是合法的INTERVAL类型字面量,SQL解析器无法识别该格式 - 引用错误:CTE中定义的临时表名为
org_table,trip_duration是字段名,你后续查询错误将字段名作为表名引用 - 类型不匹配:字符串无法直接和INTERVAL类型做大小比较
正确实现(无需转TIME类型)
INTERVAL类型本身支持原生比较,直接使用标准INTERVAL字面量即可,写法更简单也不会出现时长超范围的截断问题:
WITH org_table AS ( SELECT ended_at - started_at as trip_duration FROM `cyclistic-328701.12_month_user_data_cyclistic.20*` ) SELECT COUNTIF(trip_duration < INTERVAL 90 SECOND) AS false_start FROM org_table;
如果确实需要转成秒数做判断,可以用EXTRACT函数提取各时间单位换算求和:
WITH org_table AS ( SELECT ended_at - started_at as trip_duration FROM `cyclistic-328701.12_month_user_data_cyclistic.20*` ) SELECT COUNTIF( EXTRACT(SECOND FROM trip_duration) + EXTRACT(MINUTE FROM trip_duration)*60 + EXTRACT(HOUR FROM trip_duration)*3600 + EXTRACT(DAY FROM trip_duration)*86400 < 90 ) AS false_start FROM org_table;
注意:你提到的转TIME类型的思路不推荐使用,TIME类型仅支持00:00:00到23:59:59的范围,若行程时长超过24小时会出现截断错误,直接用INTERVAL原生比较更稳妥。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

