И снова на диване.
Обычно если ты можешь решить за 30-40 минут задание выше, комментируя вслух процесс решения и задавая уточняющие вопросы интервьюерам, шанс получить оффер на джуна/миддла высок.
Отмечу особо: важно не просто решить, важно общаться с интервьюерами. Что это значит? Это значит задавать уточняющие вопросы, если задача не до конца понятна, и рассуждать на тему оптимального решения. Например:
1. Есть ли в таблицах дубли?
Этот вопрос покажет, что ты учитываешь возможность возникновения дублей перед написанием запроса, а это напрямую влияет на его производительность. Скорее всего тебе скажут, что все окей, давай считать, что дублей нет. И в уме поставят тебе плюсик.
2. Может ли быть такое, что у какой-то из программ не было ни одной продажи, нужно ли выводить её в топ?
От этого вопроса напрямую зависит тип джойна, который ты будешь использовать. Наверняка после этого тебя спросят про виды джойнов и разницу между ними. Будь готов, это излюбленный вопрос на интервью. Так сказать, классика жанра. А если ты еще и первый заговоришь про типы джойнов, то это еще один плюсик в карму!
3. Думаю, что в данном запросе можно использовать подзапрос или CTE, а также оконку, чтобы отобрать нужное значение.
Когда вспомнишь про оконные функции, не забудь кратко сказать о том, что знаешь несколько типов оконок – ранжирующие, агрегирующие, функции смещения – и приведи для каждой из групп соответствующие примеры. Любимый вопрос, который скорее всего зададут вдогонку – в чем разница между RANK() и DENSE_RANK()?
4. Могу я уточнить, что значит ТОП 3 программы? Это топ по количеству продаж?
Интервьюерам нравится, когда кандидат уточняет бизнес-логику. Если интервьюер не захочет подсказывать, он спросит, что думаешь ты и какие критерии бы использовал для определения топа программ. Ориентируйся на здравый смысл.
5. На диалекте Vertica данную задачу можно решить без подзапроса, а на Clickhouse функция будет называться по-другому.
Высший пилотаж. Покажет, с каким стеком ты работал и что знаешь несколько диалектов SQL. Лучше, конечно, делать упор на собесе на тот диалект, который требуется в описании вакансии.
#hire_me #SQL_с_собеса