У меня есть простая таблица в Postgres, которая содержит дни недели и людей.
INSERT INTO mytable (day, person)
values
('Monday', 'A'),
('Monday', 'A'),
('Monday', 'B'),
('Tuesday', 'A'),
('Wednesday', 'A'),
('Wednesday', 'B'),
('Thursday', 'B'),
('Thursday', 'B');
Я бы хотел найти количество перекрывающихся людей для каждой пары дней. Например, в понедельник есть лица A и B. Во вторник есть только лица B, поэтому строка будет выглядеть следующим образом:
('Monday', 'Tuesday', 1)
Окончательный результат должен выглядеть следующим образом:
('Monday', 'Monday', 2),
('Monday', 'Tuesday', 1),
('Monday', 'Wednesday', 2),
('Monday', 'Thursday', 1),
('Tuesday', 'Tuesday', 1),
('Tuesday', 'Monday', 1),
('Tuesday', 'Wednesday', 1),
('Tuesday', 'Thursday', 0),
('Wednesday', 'Wednesday', 2),
('Wednesday', 'Monday', 2),
('Wednesday', 'Tuesday', 1),
('Wednesday', 'Thursday', 1),
('Thursday', 'Thursday', 1),
('Thursday', 'Monday', 1),
('Thursday', 'Tuesday', 0),
('Thursday', 'Wednesday', 1)
Я играл с перекрестными соединениями и пересечениями, но, кажется, ничто не дает правильного результата.