> ## Content Index
> Fetch the complete content index at: https://admin.kod.ru/llms.txt
> Use this file to discover other available public pages before exploring further.

# Задания по SQL с реальных собеседований. Сможете их решить?
- URL: https://admin.kod.ru/zadaniya-po-sql/
- Published: 2024-10-08T12:22:36.000Z
- Updated: 2024-10-08T12:22:36.000Z
- Description: Разбираем задачи, которые предлагают решить на собеседованиях специалистам разных уровней.
- Author: МТС
- Tags: Блоги

SQL — один из самых востребованных навыков в IT. 

Давайте разберем несколько задач, которые предлагают решить на собеседованиях специалистам разных уровней.

### Вводные к задачам

Мы будем решать задачи, опираясь на эти таблицы:

![](https://admin.kod.ru/content/images/2024/10/hate-mts-08.10_01.png)

### Задача № 1\. Для уровня Junior

**Задание.** Вывести название и цену каждого анализа, которые продавались 5 февраля 2020 года и в течение всей следующей недели.

**Примечание.** С помощью этой задачи проверяют, знает ли человек SELECT-запросы и есть ли у него навык работы с датой и временем. На собеседовании смотрят на то, правильно решена задача или нет, а специфика диалекта редко имеет значение. Если вам привычнее PostgreSQL, спокойно работайте там.

![](https://admin.kod.ru/content/images/2024/10/--------------2024-10-08---15.20.33.png)

Ответ к задаче № 1

### Задача № 2\. Для уровня Middle

**Задание.** Нарастающим итогом рассчитать, как каждый месяц каждого года увеличивалось количество проданных тестов с разбивкой по группе.

**Примечание.** С помощью этой задачи проверяют, понимает ли человек на базовом уровне оконные функции, джоины и группировки. Когда первая версия запроса будет написана, сделайте его оптимизацию. Так, в этом примере у нас CTE — обобщенные табличные выражения.

![](https://admin.kod.ru/content/images/2024/10/--------------2024-10-08---15.20.49.png)

Ответ к задаче № 2

### Задача № 3\. Для уровня Senior

В этой задаче вы будете работать всего с одной таблицей. Запрос здесь не сложный, но чтобы его написать, нужно уметь «мыслить на SQL».

Вот таблица балансов клиентов:

ClientBalance(client\_id, client\_name, client\_balance\_date, client\_balance\_value)

- client\_id — идентификатор клиента;
- client\_name — ФИО клиента;
- client\_balance\_date — дата баланса клиента;
- client\_balance\_value — значение баланса клиента.

**Задание.** Здесь есть полные дубли. Попробуйте от них избавиться, не создавая новую таблицу.

![](https://admin.kod.ru/content/images/2024/10/--------------2024-10-08---15.20.57.png)

Ответ к задаче № 3

### Вопрос № 1\. Для уровня Junior

На собеседованиях любят задавать «хитрые» вопросы, чаще Junior-специалистам, но остальным тоже перепадает. Вот один из таких вопросов.

**Вопрос.** Как оператор GROUP BY обрабатывает поля с NULL?**Ответ.** С учетом того, что NULL в SQL — это отсутствие значения, при группировке все значения NULL оказываются в одной группе. Возьмем вот такую таблицу:

![](https://admin.kod.ru/content/images/2024/10/hate-mts-08.10_02.png)

Тогда запрос select sum(score) from table group by name даст:

![](https://admin.kod.ru/content/images/2024/10/hate-mts-08.10_03.png)

### Вопрос № 2\. Для уровня Middle

Тут все не так хитро, как в вопросе № 1, но здесь требуется знать оконные функции и их тонкости. А это вполне себе требование для Middle.

**Вопрос.** Чем отличается функция RANK() от DENSE\_RANK()?

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

**Ответ.** Подобно функции ROW\_NUMBER, оконные функции RANK и DENSE\_RANK служат для нумерации строк. Но с ними все происходит отчасти по-другому: строки с одинаковыми значениями получают одинаковый ранг. При некоторых задачах это вполне оправданно. Когда два сотрудника получают одинаковую зарплату, нельзя разделить их на первого и второго, они одинаковые. Тогда вопрос: какой ранг должен быть у следующего сотрудника? Если у первых ранг 1, то у следующего сотрудника он будет 2 или 3?

### Вместо заключения

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