- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将具有复杂查询的子查询从 Oracle 转换为 Postgres。下面是子查询及其给出的错误。我知道 Postgres 中也有“WITHIN GROUP”。我错过了什么?我什至将 Listagg
更改为 String_agg
但得到了同样的错误。
Select a, Listagg(b, ', ') WITHIN GROUP (ORDER BY b) "a"
from table;
错误:
ERROR: syntax error at or near "WITHIN" LINE 65: ...a, Listagg(b, ', ') WITHIN GRO...
********** Error **********
ERROR: syntax error at or near "WITHIN" SQL state: 42601 Character: 5290
最佳答案
始终使用关键字 AS
作为 Postgres 中的列别名。
无需双引号小写标识符。 (与 Oracle 不同,Postgres 小写标识符,除非双引号。)
这也意味着,您最终得到两个列名 a
,因此您必须使用“A”作为第一个或其他名称 - 不确定您的列名是否是 “A”
或 a
。
WITHIN GROUP
只能用于这些 Ordered-Set Aggregate Functions或者这些 Hypothetical-Set Aggregate Functions在 Postgres 9.4 或更高版本中。 string_agg()
目前不在其中。但是您几乎可以将任何聚合函数用作窗口函数(Oracle 术语中的“分析函数”)。
无论哪种方式,您的查询在或者 RDBMS 中似乎都无效。您有一个聚合函数和一个未聚合的列,但没有 GROUP BY
子句。要么你希望它是一个窗口函数(Oracle 中的分析函数),然后缺少 OVER
子句。或者您需要为聚合函数添加 GROUP BY a
。
我猜你想要这样的东西:
SELECT a, string_agg(b, ', ' ORDER BY b) AS a2 -- column names?
FROM tbl
GROUP BY a;
Postgres allows to add ORDER BY
to any aggregate function. (只对某些人有意义。)
对于像这样的简单查询,您也可以只在子查询中排序:
SELECT a, string_agg(b, ', ') AS a
FROM (SELECT a, b FROM tbl ORDER BY a,b) t
GROUP BY a;
这通常更快。 But read the manual here.
关于sql - 如何将 WITHIN GROUP 从 Oracle 翻译成 Postgres?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40666324/
我是一名优秀的程序员,十分优秀!