У меня есть простой набор данных Postgres, который выглядит следующим образом:
INSERT INTO mytable (day, person)
values
('Monday', 'A'),
('Monday', 'B'),
('Tuesday', 'A'),
('Thursday', 'B');
Затем я запускаю запрос, который выдает два array_aggs следующим образом:
SELECT *
FROM (select day as d1,
array_agg(distinct person) as agg1
from mytable
group by day) AS AA
cross join
(select day as d2,
array_agg(distinct person) as agg2
from mytable
group by day) AS BB
, который дает этот набор данных:
Monday, {A,B}, Monday, {A,B}
Monday, {A,B}, Thursday, {B}
Monday, {A,B}, Tuesday, {A}
Thursday, {B}, Monday, {A,B}
Thursday, {B}, Thursday, {B}
Thursday, {B}, Tuesday, {A}
Tuesday, {A}, Monday, {A,B}
Tuesday, {A}, Thursday, {B}
Tuesday, {A}, Tuesday, {A}
Я хотел бы добавить пятый столбец к этому запросу, который определяет количество повторяющихся записей в agg1 и agg2 в каждой строке.
Так, например, первая строка будет 2, а вторая строка - 1. Я надеялся сделать это следующим образом, но это дает мне неоднозначную синтаксическую ошибку:
SELECT *, count(select unnest(agg1) intersect select unnest(agg2))
FROM (select day as d1,
array_agg(distinct person) as agg1
from mytable
group by day) AS AA
cross join
(select day as d2,
array_agg(distinct person) as agg2
from mytable
group by day) AS BB