Для отчёта по регистрациям нужны только идентификатор пользователя user_id и дата signup_at из таблицы пользователей. Какой запрос лучше соответствует задаче и не тянет лишние поля?

ASELECT user_id, signup_at FROM users ORDER BY signup_at DESC
BSELECT * FROM users ORDER BY user_id ASC
CSELECT signup_at FROM users WHERE signup_at IS NOT NULL
DSELECT user_id, signup_at FROM users WHERE signup_at IS NULL
Правильный ответ. Лучше выбирать только нужные столбцы: это упрощает дальнейшую работу и снижает риск лишней выгрузки данных.

Разбор

SELECT * вытаскивает все столбцы, что часто приводит к лишнему объёму данных в выгрузке и может случайно утащить поля, которые не нужны для аналитики. Если для отчёта требуются только user_id и signup_at, то точнее и безопаснее SELECT user_id, signup_at FROM users. Вариант только с signup_at теряет идентификатор и не годится для отчёта по регистрациям. А WHERE signup_at IS NULL меняет смысл выборки и оставит только строки с пропущенной датой.

Проверь себя · 1/3разбор после ответа
В таблице support_tickets поле resolved_at равно NULL, если тикет ещё не решён. Нужно вывести сначала нерешённые тикеты, а внутри них — по created_at по возрастанию (самые старые сверху). Какой ORDER BY подойдёт лучше всего?
Тренировать SQL в Telegram

Ещё вопросы по теме «Основы SQL-запросов»