Топ-20 практичних запитань для співбесіди з SQL для аналітиків даних/інженерів з даних

pic

Зображення створене за допомогою seaart.ai

Підготовка до співбесіди на посаду аналітика даних або інженера даних? Майстерність у SQL є критично важливою, і наша нова стаття допоможе вам! Ми зібрали 20 основних практичних запитань для співбесіди з SQL, з детальними розв'язками, бізнес-поясненнями та прикладом набору даних.

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

У сфері аналітики даних і інженерії SQL залишається основним інструментом. Якщо ви готуєтесь до співбесіди або хочете покращити свої навички SQL, освоєння цих практичних запитань значно підвищить вашу впевненість і компетентність.
Ця стаття розглядає 20 основних запитань для співбесіди з SQL, надаючи детальні розв'язки та бізнес-пояснення для кожного з них.

Приклад набору даних

Щоб продемонструвати ці запити, давайте використаємо файл прикладного набору даних SQL. Ви можете запустити його на будь-якій SQL платформі.
Рекомендую використовувати в MySQL або MS SQL Server

-- Створення таблиці Employees  
CREATE TABLE Employees (  
 EmployeeID INT PRIMARY KEY,  
 Name VARCHAR(100),  
 DepartmentID INT,  
 Salary DECIMAL(10, 2),  
 JoinDate DATE  
);  

-- Вставка тестових даних у таблицю Employees  
INSERT INTO Employees (EmployeeID, Name, DepartmentID, Salary, JoinDate) VALUES  
(1, 'John Doe', 1, 60000, '2022-01-15'),  
(2, 'Jane Smith', 2, 75000, '2021-05-20'),  
(3, 'Alice Jones', 1, 55000, '2023-03-10'),  
(4, 'Bob Brown', 3, 80000, '2020-07-25'),  
(5, 'Charlie Green', 2, 70000, '2019-11-30');  

-- Створення таблиці Departments  
CREATE TABLE Departments (  
 DepartmentID INT PRIMARY KEY,  
 DepartmentName VARCHAR(100)  
);  

-- Вставка тестових даних у таблицю Departments  
INSERT INTO Departments (DepartmentID, DepartmentName) VALUES  
(1, 'HR'),  
(2, 'Engineering'),  
(3, 'Sales');  

-- Створення таблиці Products  
CREATE TABLE Products (  
 ProductID INT PRIMARY KEY,  
 ProductName VARCHAR(100),  
 Sales DECIMAL(10, 2)  
);  

-- Вставка тестових даних у таблицю Products  
INSERT INTO Products (ProductID, ProductName, Sales) VALUES  
(1, 'Product A', 10000),  
(2, 'Product B', 15000),  
(3, 'Product C', 20000);  

-- Створення таблиці Orders  
CREATE TABLE Orders (  
 OrderID INT PRIMARY KEY,  
 CustomerID INT,  
 OrderDate DATE  
);  

-- Вставка тестових даних у таблицю Orders  
INSERT INTO Orders (OrderID, CustomerID, OrderDate) VALUES  
(1, 101, '2023-01-10'),  
(2, 102, '2023-02-15'),  
(3, 101, '2022-12-20'),  
(4, 103, '2023-03-25');  

-- Створення таблиці Customers  
CREATE TABLE Customers (  
 CustomerID INT PRIMARY KEY,  
 CustomerName VARCHAR(100)  
);  

-- Вставка тестових даних у таблицю Customers  
INSERT INTO Customers (CustomerID, CustomerName) VALUES  
(101, 'Customer A'),  
(102, 'Customer B'),  
(103, 'Customer C');

1.

Отримати третю за величиною заробітну плату без використання LIMIT або ROW_NUMBER()

SELECT MAX(Salary) AS ThirdHighestSalary  
FROM Employees  
WHERE Salary < (SELECT MAX(Salary)  
 FROM Employees  
 WHERE Salary < (SELECT MAX(Salary) FROM Employees));

Бізнес-обґрунтування: Визначення третьої за величиною заробітної плати допомагає зрозуміти розподіл заробітних плат і ухвалювати обґрунтовані рішення щодо коригування заробітних плат та розподілу бюджету.

2.

Співробітники з заробітною платою вище середнього рівня по департаменту, але нижче середнього рівня по компанії

SELECT e.EmployeeID, e.Name, e.DepartmentID, e.Salary  
FROM Employees e  
JOIN (  
 SELECT DepartmentID, AVG(Salary) AS AvgDeptSalary  
 FROM Employees  
 GROUP BY DepartmentID  
) dept ON e.DepartmentID = dept.DepartmentID  
JOIN (  
 SELECT AVG(Salary) AS AvgCompanySalary  
 FROM Employees  
) comp ON e.Salary > dept.AvgDeptSalary AND e.Salary < comp.AvgCompanySalary;

Бізнес-обґрунтування: Цей запит допомагає виявити співробітників, які добре виконують свої обов’язки в межах департаменту, але можуть потребувати додаткової підтримки чи визнання для досягнення середнього рівня по компанії.

3.

Видалити дублікати записів, зберігаючи один екземпляр

WITH Duplicates AS (  
 SELECT EmployeeID, Name, DepartmentID, Salary, JoinDate,  
 ROW_NUMBER() OVER (PARTITION BY Name, DepartmentID, Salary, JoinDate ORDER BY EmployeeID) AS rn  
 FROM Employees  
)  
DELETE FROM Employees  
WHERE EmployeeID IN (  
 SELECT EmployeeID  
 FROM Duplicates  
 WHERE rn > 1  
);

Бізнес-обґрунтування: Видалення дублікатів записів гарантує цілісність і точність даних, що є важливим для надійного звітування та аналізу.

4.

Топ три найвищі зарплати серед працівників у кожному відділі

SELECT e.EmployeeID, e.Name, e.DepartmentID, e.Salary  
FROM Employees e  
JOIN (  
 SELECT DepartmentID, Salary,  
 DENSE_RANK() OVER (PARTITION BY DepartmentID ORDER BY Salary DESC) AS rank  
 FROM Employees  
) ranked ON e.DepartmentID = ranked.DepartmentID AND e.Salary = ranked.Salary  
WHERE ranked.rank <= 3;

Бізнес-обґрунтування: Визначення найвищооплачуваних працівників у кожному відділі допомагає визнати високопродуктивних співробітників і забезпечити справедливу політику компенсацій.

5. Відсотковий внесок кожного продукту у загальні продажі

SELECT ProductID, ProductName, Sales,  
 (Sales / (SELECT SUM(Sales) FROM Products)) * 100 AS PercentageContribution  
FROM Products;

Бізнес-обґрунтування: Розуміння внеску кожного продукту в загальні продажі допомагає в стратегічному плануванні та розподілі ресурсів.

6.

Працівники, які приєдналися протягом останніх 6 місяців

SELECT EmployeeID, Name, JoinDate  
FROM Employees  
WHERE JoinDate >= DATEADD(month, -6, GETDATE());

Бізнес-обґрунтування: Відстеження нових працівників допомагає в процесах адаптації, оцінці ефективності та забезпечує хорошу інтеграцію нових співробітників в компанію.

7. Працівник/працівники з найдовшим стажем роботи

SELECT EmployeeID, Name, JoinDate  
FROM Employees  
ORDER BY JoinDate  
LIMIT 1;

Бізнес-обґрунтування: Визначення співробітників з найбільшим стажем допомагає визнати лояльність і досвід, який можна використовувати для наставництва та лідерських ролей.

8.

Знаходження прогалин у послідовності ID

WITH IDs AS (  
 SELECT EmployeeID,  
 LAG(EmployeeID) OVER (ORDER BY EmployeeID) AS PrevID  
 FROM Employees  
)  
SELECT EmployeeID AS GapStart, PrevID + 1 AS GapEnd  
FROM IDs  
WHERE EmployeeID - PrevID > 1;

Бізнес-обґрунтування: Виявлення прогалин у послідовностях ID допомагає в аудиті та забезпечує повноту даних, що є важливим для точного звітного процесу.

9. Записи з відповідними стовпцями в іншій таблиці

SELECT e.*  
FROM Employees e  
JOIN Departments d ON e.DepartmentID = d.DepartmentID  
WHERE e.DepartmentID = d.DepartmentID AND e.Name = d.DepartmentName;

Бізнес-обґрунтування: Пошук відповідних записів у різних таблицях гарантує узгодженість даних і допомагає в крос-посиланнях для комплексного аналізу.

10.

Клієнти, які зробили більше замовлень цього року порівняно з минулим

WITH ThisYearOrders AS (  
 SELECT CustomerID, COUNT(OrderID) AS OrderCount  
 FROM Orders  
 WHERE YEAR(OrderDate) = YEAR(GETDATE())  
 GROUP BY CustomerID  
),  
LastYearOrders AS (  
 SELECT CustomerID, COUNT(OrderID) AS OrderCount  
 FROM Orders  
 WHERE YEAR(OrderDate) = YEAR(GETDATE()) - 1  
 GROUP BY CustomerID  
)  
SELECT ty.CustomerID, ty.OrderCount AS ThisYearOrderCount, ly.OrderCount AS LastYearOrderCount  
FROM ThisYearOrders ty  
JOIN LastYearOrders ly ON ty.CustomerID = ly.CustomerID  
WHERE ty.OrderCount > ly.OrderCount;

Бізнес-обґрунтування: Визначення клієнтів з підвищеною частотою замовлень допомагає спрямувати маркетингові зусилля та покращити стратегії утримання клієнтів.

Висновок

Оволодіння цими SQL-запитами не тільки готує вас до співбесід, але й надає практичні навички, необхідні для ролей у галузі аналізу даних та інженерії даних.
Кожен запит вирішує конкретну бізнесову задачу, демонструючи універсальність та потужність SQL у управлінні даними та їх аналізі.

Перекладено з: Top 20 Practical SQL Interview Questions for Data Analysts/Data Engineers

Leave a Reply

Your email address will not be published. Required fields are marked *