Is there a way in PostgreSQL to take this table:
| ID | country | name | values |
|---|---|---|---|
| 1 | USA | John Smith | {1,2,3} |
| 2 | USA | Jane Smith | {0,1,3} |
| 3 | USA | Jane Doe | {1,1,1} |
| 4 | USA | John Doe | {0,2,4} |
and generate this table from it with the column agg_values:
| ID | country | name | values | agg_values |
|---|---|---|---|---|
| 1 | USA | John Smith | {1,2,3} | {0,1,3,1,1,1,0,2,4} |
| 2 | USA | Jane Smith | {0,1,3} | {1,2,3,1,1,1,0,2,4} |
| 3 | USA | Jane Doe | {1,1,1} | {1,2,3,0,1,3,0,2,4} |
| 4 | USA | John Doe | {0,2,4} | {1,2,3,0,1,3,1,1,1} |
Where each row aggregates all values except from the current row and its peers.
So if name = John Smith then agg_values = aggregate of all values where name not = John Smith. Is that possible?