Зображення створене за допомогою 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