在我的查询中,我必须得到许多应该是json聚合的数据(使用json_agg)。问题是,以常规方式执行导致我的脚本获取无效/重复数据。无效数据的数量正是我得到的最大生成的json数组的有效数据的数量。我认为问题在于“GROUP BY”占据了我正在寻找的每一处房产。以下是我的查询示例:
SELECT
o.property1 AS p1,
json_agg(o.property2) AS p2,
json_agg(o.property3) AS p3,
json_agg(oto.property2) AS otop2
FROM
objectex o
JOIN
otherobjectex oto
ON
oto.property1 = o.property1
在此查询中,如果o.property3将返回4个值并且o.property2 6.那么property3将有2个“null”值。这些空值是我试图忽略或删除的。我尝试在json_agg()中使用“DISTINCT”,但是,我可能有重复的值,我仍然想要它们。如果解决方案也可以有效和/或清洁,我将不胜感激。
答案 0 :(得分:0)
你的想象力,逻辑思维在哪里?您可以轻松修改该功能以轻松删除重复值。试试这个:
CREATE OR REPLACE FUNCTION array_unique_remove_null(anyarray)
RETURNS anyarray AS $$
SELECT ARRAY(SELECT distinct i FROM unnest($1) i WHERE i IS NOT NULL)
$$ LANGUAGE sql IMMUTABLE;
SELECT
o.property1 AS p1,
array_unique_remove_null(json_agg(o.property2)) AS p2,
array_unique_remove_null(json_agg(o.property3)) AS p3,
array_unique_remove_null(json_agg(oto.property2)) AS otop2
FROM
objectex o
JOIN
otherobjectex oto
ON
oto.property1 = o.property1