TGStat
TGStat
Type to search
Advanced channel search
  • flag English
    Site language
    flag Russian flag English flag Uzbek
  • Sign In
  • Catalog
    Channels and groups catalog Regional compilations Thematic compilations Платные каналы Search for channels
    Add a channel/group
  • Ratings
    Rating of channels Rating of groups Posts rating
    Ratings of brands and people
  • Analytics
  • Search by posts
  • Telegram monitoring
  • Promotion
    Advertising through Yandex Business Advertising in channels through TGStat Agency Advertising on TGStat.ru website
Дима SQL-ит 🧑‍💻 (Аналитика данных, AI)

28 Sep, 08:50

Open in Telegram Share Report

01:14
💳 Задача с собеса в Ozon: сотрудники с зарплатой выше, чем у руководителя


В одном из постов меня попросили разобрать эту задачку и сделать пост про selfjoin.
Получайте этот пост 🤩

Условие: вывести список сотрудников, получающих заработную плату большую, чем у непосредственного руководителя.


1️⃣ Данные:
таблица: employees
id  name  salary  boss_id
1   Аня   200     NULL     m.salary;

Три кандидата на место ???:

1)  ON e.boss_id = m.id
2)  ON e.id = m.boss_id
3)  ON e.boss_id = m.boss_id

3️⃣ Вариант 1: ссылка сотрудника = id руководителя:

Боря 150 > Аня  200 ?  нет
Вика 180 > Боря 150 ?  да
Гена 190 > Боря 150 ?  да

-> Вика, Гена

Каждый сотрудник встал в пару со своим руководителем. Это правильный ответ.

4️⃣ Вариант 2: связь перевёрнута:

Аня  200 > Боря 150 ?  да
Боря 150 > Вика 180 ?  нет
Боря 150 > Гена 190 ?  нет

-> Аня

Теперь слева руководитель, справа подчинённый. Запрос нашёл начальницу, которая получает больше подчинённого, — совсем другой вопрос.

5️⃣ Вариант 3: сравнение с коллегами:

Гена 190 > Вика 180 ?  да
Вика 180 > Гена 190 ?  нет
+ каждый в паре сам с собой — больше себя не бывает

-> Гена

Одинаковый boss_id — значит, у людей общий руководитель. Гена получает больше коллеги Вики, а не начальника.

6️⃣ Ловушка:

1)  -> Вика, Гена   верно
2)  -> Аня          мимо
3)  -> Гена         мимо

Ни один запрос не падает с ошибкой, и все возвращают правдоподобные имена. Поэтому ON проверяют глазами: слева ссылка (e.boss_id), справа id того, на кого она ссылается (m.id).

7️⃣ Финальный запрос

SELECT e.name
FROM employees e
JOIN employees m
  ON e.boss_id = m.id
WHERE e.salary > m.salary;
-- Вика, Гена

Аня в ответ не попадёт: у неё boss_id пустой, пары для неё нет. И это правильно — руководителя у неё нет, сравнивать не с кем.

Итог: 🤩

SELF JOIN — это обычный JOIN таблицы с самой собой через два алиаса. Вся сложность в одной строке ON: перепутаешь поля — получишь правдоподобный, но не верный ответ.

❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium
✔️ Подпишитесь на канал, чтобы не пропустить следующие разборы


🚬 Вопросы, обучение, консультации: Консультации


@dima_sqlit

916 1 23 16 19
Catalog
Channels and groups catalog Channels compilations Search for channels Add a channel/group
Ratings
Rating of Telegram channels Rating of Telegram groups Posts rating Ratings of brands and people
API
API statistics Search API of posts API Callback
Our channels
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Read
Академия TGStat Telegram Research 2019 Telegram Research 2021 Telegram Research 2023
Contacts
Справочный центр Support Email Jobs
Miscellaneous
Terms and conditions Privacy policy Public offer
Our bots
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot