PostgreSQL查询报INTERSECT语法错误,请求协助修复
问题排查与修复
错误原因分析
你的SQL语句存在多处语法逻辑错误:
INTERSECT是集合操作符,用于合并两个独立查询的结果集,不能放在窗口函数的OVER()子句内部,这是导致语法报错的直接原因。select("col_name")是完全错误的语法,PostgreSQL没有这种写法。All("col_name")不是窗口函数的正确用法,全局聚合应该用OVER ()(不指定分区就是全局范围)。
从你的逻辑推测,你应该是想实现:按col_name分组计算总和,再除以该字段的全局总和,若比例超过0.1则保留原col_name值,否则显示Other。
修复后的SQL语句
SELECT *, CASE WHEN (SUM("col_name") OVER (PARTITION BY "col_name") / SUM("col_name") OVER ()) > 0.1 THEN "col_name" ELSE 'Other' END AS grouped_col_name FROM #table# AS "table";
代码解释
SUM("col_name") OVER (PARTITION BY "col_name"):按col_name字段分组,计算每个分组的col_name总和。SUM("col_name") OVER ():计算整个表中col_name的全局总和(不指定分区,默认覆盖全表)。- CASE语句:对比分组总和与全局总和的比例,按规则返回对应值,同时给这个计算字段命名为
grouped_col_name方便引用。
内容的提问来源于stack exchange,提问作者Olesia
相关产品推荐
相关产品推荐

