Вы анализируете таблицу sessions, где status может быть 'success', 'failed', 'pending', и поле ended_at может быть NULL, если сессия не завершена. Вам нужно выбрать все незавершённые сессии, кроме тех, которые в статусе 'pending'.

Запрос:

Короткий ответ

Что ответить на собеседовании

Запрос:

Подробный разбор

Ответ с пояснениями

Условие

Вы анализируете таблицу sessions, где status может быть 'success', 'failed', 'pending', и поле ended_at может быть NULL, если сессия не завершена. Вам нужно выбрать все незавершённые сессии, кроме тех, которые в статусе 'pending'.

Что можно сказать о корректности следующего запроса?

select * from sessions where ended_at is null and status != 'pending';

Ответ

Запрос:

select * from sessions
where ended_at is null and status != 'pending';

имеет потенциальную проблему, связанную с обработкой NULL в условии status != 'pending'.

Если поле status может принимать значения 'success', 'failed', 'pending', то условие status != 'pending' вернёт TRUE для 'success' и 'failed', и FALSE для 'pending'. Но если в поле status могут быть NULL, то сравнение status != 'pending' вернёт UNKNOWN (не TRUE), и такие записи не попадут в выборку.

Если в таблице гарантированно нет NULL в поле status, то запрос корректен и выберет все сессии, у которых ended_at IS NULL (то есть незавершённые), и статус не равен 'pending'.

Если же NULL возможны, лучше явно обработать это, например:

select * from sessions
where ended_at is null and (status != 'pending' or status is null);

Итого, корректность зависит от наличия NULL в поле status. В остальном логика запроса соответствует условию: выбрать незавершённые сессии, кроме тех, что в статусе 'pending'.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку