Given the following input data:
id | category |
---|---|
1 | A |
1 | B |
2 | A |
2 | R |
2 | C |
3 | Z |
I aim aiming to get the following output table:
id | categories |
---|---|
1 | {“A”,”B”} |
2 | {“A”,”R”,”C”} |
3 | {“Z”} |
using the following query:
SELECT DISTINCT id, ARRAY(SELECT DISTINCT category::VARCHAR FROM test) AS categories FROM my_table
But what I get is the following table:
id | categories |
---|---|
1 | {“A”,”B”,”R”,”C”,”Z”} |
2 | {“A”,”B”,”R”,”C”,”Z”} |
3 | {“A”,”B”,”R”,”C”,”Z”} |
How can I obtain the desired output?
Note: The GROUP BY
clause did not work in this case as I’m not using an aggregation function.
Advertisement
Answer
What about using the JSON_AGG
aggregation function?
SELECT id, JSON_AGG(category) AS category FROM tab GROUP BY id ORDER BY id
Check the demo here.