7 вопросов по SQL на собеседовании в Microsoft, Airbnb, Twitter с ответами

От автора Telegram-канала Аналитика и Growth mind-set.

Вопросы и ответы взяты с зарубежных карьерных сайтов.

Microsoft

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

ms_user_dimension user_id:int acc_id:int
ms_acc_dimension acc_id:int paying_customer:varchar
ms_download_facts date:datetime user_id:int downloads:int

ОТВЕТ:

with out AS(select date , Sum (downloads) Filter(Where paying_customer = 'no') as non_paying , Sum (downloads) Filter(Where paying_customer = 'yes') as paying From ms_download_facts fact Left Join ms_user_dimension a on fact.user_id = a.user_id Join ms_acc_dimension acc on a.acc_id = acc.acc_id Group by date order by date) Select date , non_paying , paying From out Where non_paying > paying

Как выучить SQL быстрее? Читайте в посте!

Airbnb

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

airbnb_search_details id:int price:float property_type:varchar room_type:varchar amenities:varchar accommodates:int bathrooms:int bed_type:varchar cancellation_policy:varchar cleaning_fee:bool city:varchar host_identity_verified:varchar host_response_rate:varchar host_since:datetime neighbourhood:varchar number_of_reviews:int review_scores_rating:float zipcode:int bedrooms:int beds:int

ОТВЕТ:

SELECT city, property_type, avg(bedrooms) as n_bedrooms_avg, avg(bathrooms) as n_bathrooms_avg FROM airbnb_search_details GROUP BY city, property_type ORDER BY city

Twitter

Найдите сотрудника с самой высокой зарплатой в каждом отделе. Выведите название отдела, имя сотрудника и соответствующую зарплату.

employee id:int first_name:varchar last_name:varchar age:int sex:varchar employee_title:varchar department:varchar salary:int target:int bonus:int email:varchar city:varchar address:varchar manager_id:int

ОТВЕТ:

SELECT department as department, first_name as employee_name, salary FROM employee WHERE (department, salary) IN (SELECT department, MAX(salary) FROM employee GROUP BY department)

Amazon

Напишите запрос, который будет идентифицировать возвращающихся активных пользователей. Вернувшийся активный пользователь — это пользователь, совершивший вторую покупку в течение 7 дней после любой другой покупки. Выведите список user_id этих вернувшихся активных пользователей.

amazon_transactions id:int user_id:int item:varchar created_at:datetime revenue:int

ОТВЕТ:

SELECT DISTINCT(a.user_id) FROM amazon_transactions a JOIN amazon_transactions b ON a.user_id = b.user_id WHERE a.created_at - b.created_at BETWEEN 0 AND 7 AND a.id != b.id

Найдите клиента с самой высокой суммой дневных заказов в период с 01.02.2019 по 01.05.2019. Если у клиента было более одного заказа в определенный день, суммируйте стоимость его заказов в этот день. Выведите имя клиента, общую стоимость его товаров и дату.

customers id:int first_name:varchar last_name:varchar city:varchar address:varchar phone_number:varchar
orders id:int cust_id:int order_date:datetime order_details:varchar total_order_cost:int

ОТВЕТ:

select c.first_name, sum(o.total_order_cost) as total_order_cost, o.order_date from customers c inner join orders o on c.id = o.cust_id where o.order_date between '2019-02-01' and '2019-05-01' group by first_name, cust_id, order_date order by total_order_cost desc limit 1

Dropbox

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

​db_employee id:int first_name:varchar last_name:varchar salary:int department_id:int
db_dept id:int department:varchar

ОТВЕТ:

select abs(max(salary) filter (where department = 'marketing') - max(salary) filter (where department = 'engineering')) from db_employee emp LEFT JOIN db_dept dept on emp.department_id = dept.id

Salesforce

Найдите самую высокую цель, достигнутую сотрудником или сотрудниками, работающими под менеджером с id 13. Выведите имя сотрудника/сотрудников и достигнутую цель. Решение должно показывать самую высокую цель, достигнутую при manager_id=13, и какие сотрудники ее достигли.

salesforce_employees id:int first_name:varchar last_name:varchar age:int sex:varchar employee_title:varchar department:varchar salary:int target:int bonus:int email:varchar city:varchar address:varchar manager_id:int

ОТВЕТ:

select first_name, target from salesforce_employees where manager_id=13 and target=(select max(target) from salesforce_employees where manager_id=13)

А если вы интересуетесь аналитикой, то вот бесплатные курсы от лучших университетов в моем телеграм канале:

10+ бесплатных курсов по аналитике данных от Harvard University, Google, IBM и других

Сейчас много платных курсов по аналитике данных, качество которых очень низкое. Но в то же время есть бесплатные курсы от лучших университетов и зарекомендовавших себя международных платформ, о которых никто не знает.

HARVARD UNIVERSITY

Data Science: Wrangling. На к…

А тут 5 бесплатных сервисов для практики SQL:

5 бесплатных сервисов для практики SQL

Когда вы только начинаете изучать SQL, нужно как можно больше практики. Хорошо, когда есть реальные задачи на работе, на которых можно практиковаться. Но если их нет - то эти бесплатные сервисы помогут получить необходимую практику и улучшить свой уровень.

1. HackerRank

В сервисе много задач разного уровня (легк…

5
Начать дискуссию