我使用“group by”获取了许多无效值

时间:2015-12-09 12:32:26

标签: postgresql

在我的查询中,我必须得到许多应该是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”,但是,我可能有重复的值,我仍然想要它们。如果解决方案也可以有效和/或清洁,我将不胜感激。

1 个答案:

答案 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