Выбор ответа Middle Оконные функции спрашивают часто обновлено
Оконная функция в WHERE
Вопрос
Что произойдёт с запросом?
SELECT name, department_id, salary
FROM employees
WHERE ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) <= 2;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка: оконные функции нельзя использовать в WHERE. Оконные функции вычисляются на шаге SELECT, после WHERE, GROUP BY и HAVING, поэтому PostgreSQL отклонит запрос («window functions are not allowed in WHERE»).
Варианты ответа
- Вернутся по два сотрудника с самой высокой зарплатой в каждом отделе
- Ошибка: оконные функции нельзя использовать в WHEREправильный ответ
- Вернутся два сотрудника с самой высокой зарплатой во всей компании
- Условие будет проигнорировано
Разбор
Оконные функции вычисляются на шаге SELECT, после WHERE, GROUP BY и HAVING, поэтому PostgreSQL отклонит запрос («window functions are not allowed in WHERE»). Правильно: посчитать ROW_NUMBER в подзапросе или CTE и фильтровать снаружи. Условие не игнорируется: запрос просто не выполнится.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Оконные функции»
- Через сколько дней второй заказ
- Какие дубли удалить, оставив свежую запись
- Самый высоко- и низкооплачиваемый в отделе
- Самая длинная серия дней подряд
- Рост выручки к прошлому месяцу
- Скользящее среднее выручки за 3 дня
- Длинные перерывы между оплатами
- Разбиение кликов на сессии