Aggregate per Group returns Duplicates












0















I have the following scenario a user belongs to several Groups. The Groups are organized in a hierachy:



enter image description here



I want to aggregate all the Person Information of the Groups the User Belongs to. Eg. Person 1 belongs to Group 7. And Group 7 has connections to the following Groups 1,5,7,8 (complete branch)



I wrote the following query:



SELECT person.id, array_agg(info)
FROM person LEFT JOIN person_group
ON ARRAY[person.id] && path
LEFT JOIN person_information ON
ARRAY[person_information.id] && path
GROUP BY person.id;


Problem with this query is that I get duplicated Information:



enter image description here



I don't want to use UNIQUE on the array_agg(info) field. Rather I would like write my join so that I only get UNIQUE rows of the Person Information Table.



*How would I do that?*Thank you










share|improve this question







New contributor




John Smith is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 1





    It would be nice if you share your desired output. Thanks.

    – Luan Huynh
    13 hours ago











  • And maybe a dbfiddle

    – dezso
    12 hours ago
















0















I have the following scenario a user belongs to several Groups. The Groups are organized in a hierachy:



enter image description here



I want to aggregate all the Person Information of the Groups the User Belongs to. Eg. Person 1 belongs to Group 7. And Group 7 has connections to the following Groups 1,5,7,8 (complete branch)



I wrote the following query:



SELECT person.id, array_agg(info)
FROM person LEFT JOIN person_group
ON ARRAY[person.id] && path
LEFT JOIN person_information ON
ARRAY[person_information.id] && path
GROUP BY person.id;


Problem with this query is that I get duplicated Information:



enter image description here



I don't want to use UNIQUE on the array_agg(info) field. Rather I would like write my join so that I only get UNIQUE rows of the Person Information Table.



*How would I do that?*Thank you










share|improve this question







New contributor




John Smith is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 1





    It would be nice if you share your desired output. Thanks.

    – Luan Huynh
    13 hours ago











  • And maybe a dbfiddle

    – dezso
    12 hours ago














0












0








0








I have the following scenario a user belongs to several Groups. The Groups are organized in a hierachy:



enter image description here



I want to aggregate all the Person Information of the Groups the User Belongs to. Eg. Person 1 belongs to Group 7. And Group 7 has connections to the following Groups 1,5,7,8 (complete branch)



I wrote the following query:



SELECT person.id, array_agg(info)
FROM person LEFT JOIN person_group
ON ARRAY[person.id] && path
LEFT JOIN person_information ON
ARRAY[person_information.id] && path
GROUP BY person.id;


Problem with this query is that I get duplicated Information:



enter image description here



I don't want to use UNIQUE on the array_agg(info) field. Rather I would like write my join so that I only get UNIQUE rows of the Person Information Table.



*How would I do that?*Thank you










share|improve this question







New contributor




John Smith is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I have the following scenario a user belongs to several Groups. The Groups are organized in a hierachy:



enter image description here



I want to aggregate all the Person Information of the Groups the User Belongs to. Eg. Person 1 belongs to Group 7. And Group 7 has connections to the following Groups 1,5,7,8 (complete branch)



I wrote the following query:



SELECT person.id, array_agg(info)
FROM person LEFT JOIN person_group
ON ARRAY[person.id] && path
LEFT JOIN person_information ON
ARRAY[person_information.id] && path
GROUP BY person.id;


Problem with this query is that I get duplicated Information:



enter image description here



I don't want to use UNIQUE on the array_agg(info) field. Rather I would like write my join so that I only get UNIQUE rows of the Person Information Table.



*How would I do that?*Thank you







postgresql query-performance query






share|improve this question







New contributor




John Smith is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




John Smith is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




John Smith is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 15 hours ago









John SmithJohn Smith

101




101




New contributor




John Smith is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





John Smith is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






John Smith is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 1





    It would be nice if you share your desired output. Thanks.

    – Luan Huynh
    13 hours ago











  • And maybe a dbfiddle

    – dezso
    12 hours ago














  • 1





    It would be nice if you share your desired output. Thanks.

    – Luan Huynh
    13 hours ago











  • And maybe a dbfiddle

    – dezso
    12 hours ago








1




1





It would be nice if you share your desired output. Thanks.

– Luan Huynh
13 hours ago





It would be nice if you share your desired output. Thanks.

– Luan Huynh
13 hours ago













And maybe a dbfiddle

– dezso
12 hours ago





And maybe a dbfiddle

– dezso
12 hours ago










0






active

oldest

votes











Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "182"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});






John Smith is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f227473%2faggregate-per-group-returns-duplicates%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes








John Smith is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















John Smith is a new contributor. Be nice, and check out our Code of Conduct.













John Smith is a new contributor. Be nice, and check out our Code of Conduct.












John Smith is a new contributor. Be nice, and check out our Code of Conduct.
















Thanks for contributing an answer to Database Administrators Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f227473%2faggregate-per-group-returns-duplicates%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

الفوسفات في المغرب

Four equal circles intersect: What is the area of the small shaded portion and its height

بطل الاتحاد السوفيتي