Presto与SQLite使用OVER PARTITION BY窗口函数报语法错误如何解决
报错原因
你遇到语法错误的核心原因是使用了table作为查询表名:table是SQL标准的保留关键字,SQL解析器会将它识别为语法关键字而非表名,从而触发括号相关的语法报错。此外如果你的SQLite版本低于3.25.0,也会因为不支持窗口函数语法导致报错。
解决方案
1. 修正表名引用
- 如果你是写示例时将实际表名替换为了
table,直接把SQL中的table替换为你真实的业务表名即可。 - 如果你的实际表名确实为
table,需要对保留关键字加转义符:- Presto SQL使用双引号转义:
select brand, store, count(store) OVER (PARTITION BY brand) as num_stores from "table" - SQLite使用反引号转义:
select brand, store, count(store) OVER (PARTITION BY brand) as num_stores from `table`
- Presto SQL使用双引号转义:
修正表名后,你写的窗口函数逻辑本身是正确的,可以直接输出你预期的统计结果。
2. 低版本SQLite兼容方案
如果你的SQLite版本低于3.25.0不支持窗口函数,可以改用关联子查询的方式实现相同逻辑:
select t.brand, t.store, s.num_stores from 你的实际表名 t left join ( select brand, count(store) as num_stores from 你的实际表名 group by brand ) s on t.brand = s.brand
内容的提问来源于stack exchange,提问作者ljc8888
相关产品推荐
相关产品推荐

