Разбор SQL-задачи с технического собеседования VK На собеседованиях в… — Next stop - Offer — TG.ME

Разбор SQL-задачи с технического собеседования VK

На собеседованиях в бигтех очень любят задачи на оконные функции. Особенно те, где нужно посчитать топ-N внутри группы

Разберём одну из задач, которая встречалась мне на интервью во ВКонтакте

⏩Формулировка задачи

Есть таблица logs:
platform — тип платформы
nav_screen — точка входа в видео
total_view_time — время просмотра с этого экрана

⏩Задача

➡️Для каждой платформы найти топ-5 экранов по времени просмотра

Если время у нескольких экранов одинаковое — вывести все

⏩Решение через оконную функцию

with agg_data_rank as (
select
platform,
nav_screen,
dense_rank() over(
partition by platform -- группируем по платформе
order by sum(total_view_time) desc -- сортируем по суммарному времени просмотра
) as rn
from logs
group by 1,2
)

select
*
from agg_data_rank
where rn <= 5


Но на собеседованиях часто усложняют задачу. Иногда интервьюер говорит: "А теперь решите без оконных функций". И тут многие начинают путаться. На самом деле идея довольно простая

➡️Подумайте как решить данную задачу без оконной функции

with agg_data as (
select
platform,
nav_screen,
sum(total_view_time) as total_view_time_agg -- считаем total_time_view
from logs
group by 1,2
)

select
a1.platform,
a1.nav_screen,
count(a2.nav_screen) + 1 as rn -- считаем кол-во экранов у которых TTV выше чем у текущего()
from agg_data a1
left join agg_data a2 -- селф джоин смотрим, сколько есть экранов, у которых TTV выше, чем у текущей строки
on a1.platform = a2.platform
and a1.nav_screen != a2.nav_screen
and a1.total_view_time_agg < a2.total_view_time_agg
group by 1,2
having count(a2.nav_screen) + 1 <= 5

Небольшой лайфхак:
Если хотите понять такие задачи по-настоящему, а не просто запомнить решение: возьмите мини-пример на 2 строки и посмотрите, как будет работать join, агрегация.

Посмотрите:
🔴какие строки соединяются;
🔴как работает агрегация

После этого такие задачи начинают читаться намного проще. Вообще на собеседованиях в бигтех такие задачи — классика

Если интересно, могу иногда выкладывать:
🔴задачи с реальных интервью;
🔴разборы решений;
🔴и типичные ловушки, в которые попадают кандидаты

⬇️Напишите в комментариях, получилось ли решить задачу без оконной функции?
March 13, 2026 1.3K 15