在Metabase中运行除法逻辑SQL代码时出现报错,请求排查原因
问题排查与修正
你的SQL语句存在两个明显语法错误:
- 第二个统计子查询中,
FROM bookings后直接使用AND {{created_at}},缺少必要的WHERE关键字,SQL语法要求过滤条件必须以WHERE开头 - 括号不匹配,第二个子查询的闭合括号缺失,同时外层的括号可以适当简化
修正后的基础版本
SELECT (SELECT count(*) FROM `bookings` WHERE `bookings`.`status` = 'collect_payment' AND {{created_at}}) / (SELECT count(*) FROM `bookings` WHERE {{created_at}}) ;
更高效的优化版本
如果数据集较大,两次扫描bookings表会影响性能,可以用条件聚合只扫描一次表:
SELECT SUM(CASE WHEN `status` = 'collect_payment' THEN 1 ELSE 0 END) / COUNT(*) FROM `bookings` WHERE {{created_at}} ;
这样写法不仅语法正确,还能减少一次全表扫描,执行效率更高。
内容的提问来源于stack exchange,提问作者Mohammad Al Mashwakhi
相关产品推荐
相关产品推荐

