В запросе используется выражение: SELECT user_id, CASE WHEN age < 18 THEN 'подросток' WHEN age < 30 THEN 'молодой' WHEN age < 50 THEN 'средний' ELSE 'старший' END AS сегмент FROM users. Пользователю 25 лет — какое значение он получит и почему?
AСегмент получит значение последней истинной ветки
WHEN, потому что условия проверяются снизу вверхBСегмент получит значение первой истинной ветки
WHEN, потому что условия проверяются сверху внизCСегмент будет содержать
NULL для всех строк, если хотя бы одно условие WHEN истинно одновременноDЗапрос вернёт ошибку, потому что несколько условий
WHEN не могут одновременно быть истиннымиПравильный ответ.
CASE WHEN проверяет условия по порядку сверху вниз и возвращает результат первой истинной ветки.Разбор
Выражение CASE перебирает ветки WHEN последовательно. Для пользователя 25 лет первое условие age < 18 ложно, второе age < 30 истинно — он получит значение «молодой». Третье условие даже не проверяется. Этот порядок важен: если бы age < 50 стояло первым, пользователь попал бы в группу «средний».
Проверь себя · 1/3разбор после ответа
У пользователя
first_name = ' Анна ' и last_name = ' Иванова ' (с лишними пробелами по краям). Что вернёт SELECT CONCAT(TRIM(first_name), ' ', TRIM(last_name))?Ещё вопросы по теме «Основы SQL-запросов»
- В таблице `users` нужно выбрать только активных пользователей из России или Казахстана. Какой `WHERE` соответствует требованию?
- Для отчёта по регистрациям нужны только идентификатор пользователя `user_id` и дата `signup_at` из таблицы пользователей. Какой запрос лучше соответствует задаче и не тянет лишние поля?
- Нужно получить 20 самых новых событий из таблицы `events` (по времени `event_time`) и показать их в выдаче сверху. Какой запрос верный?
- Вы строите выдачу «последние заказы» и используете `LIMIT 50`. Поле `created_at` не уникально (много заказов в одну секунду). Какой `ORDER BY` лучше, чтобы порядок был детерминированным?
- Что можно корректно утверждать про результат запроса `SELECT user_id FROM users LIMIT 10`, если в нём нет `ORDER BY`?
- Все вопросы по «Основы SQL-запросов» →