Самосоединение: пары сотрудников из одного города

Средняя self-join Avito

Условие задачи

В таблице staff хранятся сотрудники (id, name, city). Для оффлайн-митапов нужно составить список всех пар коллег, которые находятся в ОДНОМ городе. Каждая пара должна встречаться ровно один раз (пары {Анна, Борис} и {Борис, Анна} — это одна и та же пара, не дублируй) и человек не образует пару сам с собой. Верни колонки name_a, name_b, city, где внутри пары name_a — сотрудник с меньшим id. Сортировка по city, затем по name_a, затем по name_b.

Схема данных

CREATE TABLE staff (
  id   INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  city TEXT NOT NULL
);

Темы

self-join join pairs inequality-join sqlite deduplication

Подсказки

Что проверяет эта задача

Задача «Самосоединение: пары сотрудников из одного города» учит решать задачи по теме «self-join» так, как это спрашивают на собеседовании аналитика данных. Такие задачи встречаются на собеседованиях в Avito и других IT-компаниях. Уровень средний — типичная боевая задача на уверенное владение SQL.

Как подступиться к решению

Сначала разберись со схемой данных и пойми, какой результат нужен на выходе. Определи, какие таблицы и поля задействованы, и собирай запрос пошагово: фильтрация → соединение или группировка → итоговый отбор и сортировка. Проверь результат на крайних случаях — NULL, дубликаты, пустые группы. Свой запрос сразу прогоняешь автопроверкой в интерактивной SQL-песочнице на реальной базе (SQLite и PostgreSQL 16 прямо в браузере).

Хочешь разобрать SQL системно с нуля — пройди бесплатный курс «SQL с нуля» и закрепи навык в тренажёре.

Решить в интерактивной SQL-песочнице → ← Все SQL-задачи