Блиц в Авито
Что проверяет: оконные функции lag, group by с distinct, поведение join и фильтров
Блиц-вопросы по SQL из тестового в интернет-сервис объявлений
В каждом вопросе есть только один правильный ответ. При решении считать, что все запросы синтаксически корректны.
1) В таблице Revenue три колонки:
| колонка | описание |
|---|---|
| event_date | дата |
| user_id | уникальный id пользователя |
| revenue | выручка от пользователя в этот день |
Какую из колонок нужно добавить в запрос,
select event_date, user_id, revenue, <?>
from revenue
order by event_date desc, user_idчтобы в ней на каждый день содержалась доля выручки пользователя в этот день от выручки того же пользователя в предыдущий день?
Для каждой комбинации user_id, event_date есть только одно значение revenue, в данных нет Null-ов.
a) revenue/lag(revenue) over(order by user_id, event_date),
b) revenue/lag(revenue) over(partition by user_id order by event_date),
c) revenue/lag(revenue) over(order by event_date),
d) revenue/lag(revenue) over(partition by user_id, event_date order by user_id, event_date)
select distinct a, b, c, sum(d) as revenue
from table
group by a, b, cСколько строк вернет данный запрос, если такой же запрос без «distinct» вернет 600 строк, а в столбце revenue содержится 117 уникальных значений?
a) 483
b) 600
c) 117
d) 561
3) Какой запрос вернет самое большое число?
Для справки: (A right join B) эквивалентно (B left join A).
a)
select count(distinct first.counter_column)
from first
left join second
on first.join_key = second.join_key
where second.filter_column >= 5b)
select count(distinct first.counter_column)
from first left join second
on first.join_key = second.join_key
and second.filter_column >= 5c)
select count(distinct first.counter_column)
from first right join second
on first.join_key = second.join_key
where second.filter_column >= 5d)
select count(distinct first.counter_column)
from first right join second
on first.join_key = second.join_key
and second.filter_column >= 5