У меня есть простая таблица в 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)
Я играл с перекрестными соединениями и пересечениями, но, похоже, ничего не дает правильный результат.