👊А я сейчас вам покажу откуда на кандидата нападение готовилось
На позицию аналитика вас 100% будут спрашивать SQL.
Хочу показать вам задание, на которое отвечают только 2 из 10 кандидатов (по личной статистике). Очень популярная задачка, ей уже лет 5 как минимум, встречалась на собесах Яндекса, Сбера, ВТБ.
Вам дают таблицу. Допустим, вот такую:
id1 | id2 | id3
NULL 1 NULL
2 2 NULL
5 NULL NULL
NULL NULL NULL
2 3 NULL
А дальше вам предлагают написать, что будет результатом каждого из запроса к такой таблице:
select
max(id1) = 5
sum(id1) = 9
sum(id1+id2) = 9
sum(id3) = null
avg(id1) = 3
sum(8) = 40
count(*) = 5
count(1) = 5
count(id1) = 3
count(id3) = 0
count('id1') = 5
count(distinct id1) = 2
from table
Задание главным образом проверяет знания о том, как функции работают с null значениями и специфические конструкции.
1) В агрегатных функциях, таких как SUM, AVG, MAX и MIN, NULL обрабатывается следующим образом: для вычисления результата принимаются в рассмотрение только значения полей, не содержащие NULL.
2) Исключением является функция COUNT(*), возвращающая общее количество строк в выборке. COUNT(*) не принимает на вход никакого выражения, а просто возвращает количество строк в выборке, независимо от наличия NULL значений.
3) Но COUNT(ИмяПоля) ведет себя как и остальные агрегатные функции, то есть считает записи, в которых значение указанного поля не является NULL.
4) COUNT(*) и COUNT(ИмяПоля) вернут 0, если нет записей в наборе данных. Другие агрегатные функции вернут NULL в таком случае.
5) У функции COUNT есть еще одна форма - COUNT(DISTINCT выражение). При такой форме записи функция вернет количество уникальных значений, при этом NULL значения по прежнему не учитываются.
6) Функция COUNT в SQL подсчитывает количество ненулевых значений в указанном столбце или количество строк, если передан аргумент, который не является столбцом.
7) Функция SUM(число) суммирует число для каждой строки, которая есть в таблице.
Подобный вопрос есть и в боте для подготовки к собеседованиям @DataismPrepBot. Пользуйтесь!
Post #354
2.94K
- 🔥 50
- 👍 17
- ❤ 6
- 🗿 1