我试图理解为什么会这样:
select
array_to_json(array_agg(row_to_json(positions_table)))
from (
select
sum(start_month),
function_id,
profile_id
from positions as subquery
group by function_id, profile_id
) as positions_table
但这不是:
select
profiles.id,
(array_to_json(array_agg(row_to_json(
select
sum(start_month),
function_id,
profile_id
from positions as subquery
group by function_id, profile_id
))))
from profiles
似乎我不允许将select...
语句放在array_to_json(array_agg(row_to_json()))
内,而是需要引用一个表。
但我很怀疑我可能会遗漏一些东西。
错误为syntax error near select
。
答案 0 :(得分:2)
您可以通过将子选项包含在括号中来修复语法错误,但之后您会看到第二个错误; postgres会报告:
子查询必须只返回一列
如果您修复 错误,您会看到:
列“profiles.id”必须出现在GROUP BY子句中或用于聚合函数
......这更接近问题的真正原因。添加GROUP BY id
将获得postgres报告根本原因:
用作表达式
的子查询返回的多行
函数row_to_json
期待单行。
要按个人资料ID汇总您的json摘要,您必须执行加入。
SELECT
pr.id,
array_to_json(array_agg(row_to_json(positions_table.*)))
FROM profiles pr JOIN (
SELECT sum(start_month), function_id, profile_id
FROM positions
GROUP BY function_id, profile_id
) positions_table ON positions_table.profile_id = pr.id
GROUP BY pr.id
(您可以从.*
中删除positions_table.*
,我只是为了清晰起见而添加了它。