Программы
Подготовка к собеседованиямA/B-тесты для аналитиковML и Causal InferenceA/B-тесты для менеджеровОбучение для команд
Бесплатные материалы
База знаний185+ тестовых заданийRoadmap по A/BЧеклист A/B-тестаОтзывыО проектеОставить заявку
Собеседования и тестовые задания

8 популярных вопросов по теории SQL с собеседований

17 октября 2024·2 мин чтения·Павел Бухтик·Оригинал в Telegram ↗

Все привыкли видеть задачки на SQL на собеседованиях. Но вместо задач, либо в дополнение к ним, можно встретить и вопросы на понимание теории SQL.

Предлагаю сегодня потренироваться на таких вопросах.

1. В чем отличие PARTITION BY и GROUP BY?

GROUP BY используется для агрегации данных по определённым колонкам на уровне всего запроса. Пишется после условия WHERE в запросе.

PARTITION BY не группирует строки, а просто разделяет их на «разделы». Указывается в условии OVER() при использовании оконных функций.

GROUP BY уменьшает количество строк. А вот PARTITION BY не меняет их количество, но добавляет новый столбец.

2. В чем отличие WHERE и HAVING?

WHERE фильтрует строки до группировки, работает с отдельными строками. Указывается сразу после FROM или JOIN, если используется.

HAVING фильтрует группы строк после группировки (GROUP BY). Работает с агрегатными функциями. Указывается после условия GROUP BY.

3. В чем разница между INNER JOIN и LEFT JOIN?

INNER JOIN возвращает только строки, у которых есть совпадения по ключу в обеих таблицах.

LEFT JOIN возвращает все строки из левой таблицы, даже если нет совпадений в правой. Для отсутствующих в правой таблице значений возвращаются NULL.

4. Как работает UNION и чем отличается от UNION ALL?

UNION объединяет результаты двух запросов и удаляет дубликаты.

UNION ALL объединяет результаты двух запросов, но не удаляет дубликаты, возвращая все строки.

5. Как можно удалить дубликаты строк в SQL?

Для этого в запросе используется оператор DISTINCT, который оставляет только уникальные строки.

6. Что такое подзапросы и когда их следует использовать?

Подзапросы (subqueries) — это вложенные запросы внутри основного запроса, которые возвращают данные для использования в условиях фильтрации, агрегации или других операций.

Следует использовать, например, когда:

  • Нужно отфильтровать данные на основе другого запроса;
  • Требуется использовать агрегатные значения;
  • Проверяется наличие данных через EXISTS;
  • Операции обновления или удаления зависят от других таблиц.

Также в некоторых случаях они помогают делать запрос более читаемым.

7. Карточка 7/8 в загрузке отсутствует.

8. Как получить дробное значение при делении 2 целочисленных?

Ответ на этот вопрос сильно зависит от конкретной СУБД.

Чаще всего, одно из чисел нужно явно привести к типу с плавающей запятой, например DECIMAL или FLOAT:

sql
SELECT CAST(a AS FLOAT) / bFROM table

Готовишься к собеседованию на аналитика?

Посмотри базу реальных тестовых заданий и разборы кейсов.

Перейти к тестовым заданиям