【发布时间】:2018-05-17 18:45:02
【问题描述】:
我正在尝试在 PostgreSQL 中查询包含使用左连接横向的 2 个(或更多)表的结果,并且我需要为表 entidad_a_(主表)的每条记录以及来自表 entidad_b_ 必须包含在 array_agg 生成的一个字段中。在这个数组中,我必须删除重复的元素,并且我必须在主表中保留顺序数组。 我需要执行这个 SQL 查询:
SELECT entidad_a_._id_ AS "_id", CASE WHEN count(entidadB) > 0 THEN array_agg(DISTINCT entidadB._id,ordinality order by ordinality)
ELSE NULL END AS "entidadB"
FROM entidad_a_ as entidad_a_, unnest(entidad_a_.entidad_b_) WITH ORDINALITY AS u(entidadb_id, ordinality)
LEFT JOIN LATERAL (
SELECT entidad_b_3._id_ AS "_id", entidad_b_3.label_ AS "label"
FROM entidad_b_ as entidad_b_3
WHERE entidad_b_3._id_ = entidadb_id
GROUP BY entidad_b_3._id_
LIMIT 1000 OFFSET 0
) entidadB ON TRUE
GROUP BY entidad_a_._id_
LIMIT 1000 OFFSET 0
但是我有错误.... 我怎样才能得到这些结果?
已编辑: 我的错误是: 错误:函数 array_agg (integer, bigint) 不存在 SQL 状态:42883 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。 字符:69
如果查询是: ......array_agg(DISTINCT entidadB._id order by ordinality)...... 错误是: 错误:在具有 DISTINCT 的聚合中,ORDER BY 表达式必须出现在参数列表中 SQL状态:42P10 字符:110
我的问题是array_agg、DISTINCT和ORDER by的组合
【问题讨论】:
-
错误是什么?请edit您的问题并添加您收到的错误消息 - 在 cmets 中不要邮政编码或其他信息。
-
您对错误消息有什么不明白的地方?你在谷歌上搜索它们(没有你的具体名字)和搜索你的标题学到了什么?为什么铸造不起作用?为什么不将 distinct & order 与参数一起使用?
-
你能解释一下并用 distinct 和 order 的例子吗?我将它与 array_agg 结合使用时会出现错误。现在我正在尝试创建一个自定义聚合函数。
标签: postgresql left-join sql-order-by distinct