Considering the following data:
|model| qty | color |
--------------------------------------------------
| y | 6 | {yellow,red,red} |
--------------------------------------------------
| z | 4 | {red,blue,yellow} |
--------------------------------------------------
| x | 9 | {yellow,yellow,yellow,blue,yellow} |
--------------------------------------------------
Is there a way of counting each "color" grouped in the array below, without using a subquery? (For "y" I would have "yellow:1", "red:2", for instance)
SELECT model, SUM(qty), ARRAY_AGG(color) FROM test GROUP BY model;
Something like:
SELECT model, SUM(qty), ARRAY_AGG(ARRAY[color, COUNT(*)::TEXT]) FROM test GROUP BY model;
Sample code:
CREATE TABLE test (model TEXT, qty DOUBLE PRECISION, color TEXT);
INSERT INTO test (model, qty, color) VALUES
('x', 1, 'yellow'),
('y', 1, 'yellow'),
('z', 2, 'red'),
('x', 3, 'yellow'),
('y', 1, 'red'),
('z', 1, 'blue'),
('x', 2, 'yellow'),
('x', 1, 'blue'),
('y', 4, 'red'),
('z', 1, 'yellow'),
('x', 2, 'yellow');