Перевод статьи «Top 50 SQL Query Interview Questions and Answers for Practice».
В этой статье собраны одни из самых распространённых SQL-запросов, которые часто встречаются на собеседованиях. Если хотите пропустить базовый уровень и сразу перейти к более сложным задачам, откройте раздел для опытных специалистов.
Содержание:
- Вопросы по SQL-запросам для начинающих
- Вопросы по SQL-запросам для опытных специалистов
- Вопросы по SQL-запросам на основе различных сценариев
Рассмотрите следующие две таблицы в качестве справочных, выполняя практические задания по SQL-запросам.
Таблица – EmployeeDetails
EmpId | FullName | ManagerId | DateOfJoining | City |
---|---|---|---|---|
121 | John Snow | 321 | 01/31/2019 | Toronto |
321 | Walter White | 986 | 01/30/2020 | California |
421 | Kuldeep Rana | 876 | 27/11/2021 | New Delhi |
Таблица – EmployeeSalary
EmpId | Project | Salary | Variable |
---|---|---|---|
121 | P1 | 8000 | 500 |
321 | P2 | 10000 | 1000 |
421 | P1 | 12000 | 0 |
Для вашего удобства я составил список из топ-10 вопросов. Вы можете попробовать решить их самостоятельно, а затем перейти по ссылкам, чтобы ознакомится с ответами.
- SQL-запрос для получения записей, которые присутствуют в одной таблице, но отсутствуют в другой.
- SQL-запрос для получения всех сотрудников, которые не работают ни над одним проектом.
- SQL-запрос для получения всех сотрудников из таблицы EmployeeDetails, которые присоединились к компании в 2020 году.
- Получите из таблицы EmployeeDetails всех сотрудников, у которых есть запись о зарплате в таблице EmployeeSalary.
- Напишите SQL-запрос для получения данных о количестве сотрудников по каждому проекту.
- Получение имен сотрудников и данных об их зарплате, даже если значение зарплаты для сотрудника отсутствует.
- Напишите SQL-запрос для получения всех сотрудников, которые также являются менеджерами.
- Напишите SQL-запрос для получения дубликатов записей из таблицы EmployeeDetails.
- Напишите SQL-запрос для выборки только нечётных строк из таблицы.
- Напишите запрос, чтобы найти 3-ю по величине зарплату из таблицы без использования операторов TOP или LIMIT.
🔍 Хочешь работать тестировщиком, но не знаешь, где искать вакансии для Junior?
Мы уже всё нашли за тебя! Подписывайся и получай лучшие предложения 🚀 в нашем Telegram канале "Вакансии QA".
Вопросы по SQL-запросам для начинающих
Ниже представлен список топовых SQL-вопросов и ответов для начинающих, которые помогут вам при подготовке к собеседованиям. В этих запросах мы сосредоточимся исключительно на основных SQL-командах.
1. Напишите SQL-запрос, чтобы получить EmpId
и FullName
всех сотрудников, работающих под руководством менеджера с ID = ‘986’.
Мы можем использовать таблицу EmployeeDetails и добавить условие WHERE
, чтобы выбрать нужного менеджера:
SELECT EmpId, FullName FROM EmployeeDetails WHERE ManagerId = 986;
2. Напишите SQL-запрос, чтобы получить список различных проектов из таблицы EmployeeSalary.
При обращении к таблице EmployeeSalary видно, что в ней указаны проекты, назначенные каждому сотруднику, то есть при выборке значений из столбца Project
мы получим дубликаты значений проектов.
Используем оператор DISTINCT
для получения уникальных значений проектов:
SELECT DISTINCT(Project) FROM EmployeeSalary;
3. Напишите SQL-запрос, чтобы получить количество сотрудников, работающих над проектом ‘P1”.
В этом запросе мы используем агрегатную функцию COUNT()
вместе с условием WHERE
:
SELECT COUNT(*) FROM EmployeeSalary WHERE Project = 'P1';
4. Напишите SQL-запрос, чтобы найти максимальную, минимальную и среднюю зарплату сотрудников.
Для этого используем агрегатные функции SQL: MAX()
, MIN()
и AVG()
:
SELECT MAX(Salary), MIN(Salary), AVG(Salary) FROM EmployeeSalary;
5. Напишите SQL-запрос для поиска ID сотрудников, чья зарплата находится в диапазоне от 9000 до 15000.
Для этого используем оператор BETWEEN
вместе с условием WHERE
:
SELECT EmpId, Salary FROM EmployeeSalary WHERE Salary BETWEEN 9000 AND 15000;
6. Напишите SQL-запрос, чтобы получить сотрудников, которые живут в Торонто и работают под руководством менеджера с ID = ‘321’.
Поскольку нужно выполнить оба условия — сотрудники должны жить в «Toronto» и одновременно иметь ManagerId
равный 321, используем оператор AND
:
SELECT EmpId, City, ManagerId FROM EmployeeDetails WHERE City='Toronto' AND ManagerId='321';
7. Напишите SQL-запрос, чтобы получить всех сотрудников, которые либо живут в Калифорнии либо работают под руководством менеджера с ID = ‘321’.
В этом случае нужно выполнить хотя бы одно из условий — сотрудники должны либо проживать в «California», либо иметь ManagerId
равный 321. Поэтому используем оператор OR
:
SELECT EmpId, City, ManagerId FROM EmployeeDetails WHERE City='California' OR ManagerId='321';
8. Напишите SQL-запрос, чтобы получить всех сотрудников, которые работают над проектами, отличными от ‘P1’.
В этом случае мы используем оператор NOT
, чтобы исключить строки, которые не удовлетворяют заданному условию:
SELECT EmpId FROM EmployeeSalary WHERE NOT Project='P1';
Или можно использовать оператор <> (“не равно”):
SELECT EmpId FROM EmployeeSalary WHERE Project <> 'P1';
9. Напишите SQL-запрос, чтобы отобразить общую зарплату каждого сотрудника, сложив базовую зарплату (Salary
) и переменную часть (Variable
).
Здесь мы можем использовать оператор +
для сложения значений:
SELECT EmpId, Salary+Variable as TotalSalary FROM EmployeeSalary;
10. Напишите SQL-запрос, чтобы получить сотрудников, чьё имя начинается с любых двух символов, затем содержит текст ‘hn‘ , и далее может заканчиваться любой последовательностью символов.
Для этого мы можем использовать оператор LIKE
вместе с шаблонами ‘_’ и ‘%’, где ‘_’ соответствует одному символу и ‘%’ соответствует 0 или нескольким символам:
SELECT FullName FROM EmployeeDetails WHERE FullName LIKE '__hn%';
11. Напишите SQL-запрос, чтобы получить все EmpId
, которые присутствуют хотя бы в одной из таблиц — EmployeeDetails или EmployeeSalary.
Чтобы получить уникальные идентификаторы сотрудников из обеих таблиц, используем оператор UNION
, который объединяет результаты двух SQL-запросов и возвращает уникальные строки:
SELECT EmpId FROM EmployeeDetails UNION SELECT EmpId FROM EmployeeSalary;
12. Напишите SQL-запрос, чтобы получить общие записи между двумя таблицами.
В SQL Server используем оператор INTERSECT
:
SELECT EmpId FROM EmployeeDetails INTERSECT SELECT EmpId FROM EmployeeSalary;
В MySQL нет оператора INTERSECT
. Вместо этого используем INNER JOIN
.
SELECT ed.EmpId FROM EmployeeDetails ed INNER JOIN EmployeeSalary es ON ed.EmpId = es.EmpId;
13. Напишите SQL-запрос, чтобы получить записи, которые присутствуют в одной таблице, но отсутствуют в другой.
В SQL Server используем оператор EXCEPT
:
SELECT EmpId FROM EmployeeDetails EXCEPT SELECT EmpId FROM EmployeeSalary;
Так как в MySQL нет оператора
, можно использовать EXCEPT
LEFT JOIN
:
SELECT ed.* FROM EmployeeDetails ed LEFT JOIN EmployeeSalary es ON ed.EmpId = es.EmpId WHERE es.EmpId IS NULL;
14. Напишите SQL-запрос, чтобы получить EmpId
, которые присутствуют в обеих таблицах — EmployeeDetails и EmployeeSalary.
Используем подзапрос с оператором IN
:
SELECT EmpId FROM EmployeeDetails WHERE EmpId IN (SELECT EmpId FROM EmployeeSalary);
15. Напишите SQL-запрос, чтобы получить EmpId
, которые присутствуют в таблице EmployeeDetails, но отсутствуют в EmployeeSalary.
Это можно сделать с помощью подзапроса и оператора NOT IN
:
SELECT EmpId FROM EmployeeDetails WHERE EmpId NOT IN (SELECT EmpId FROM EmployeeSalary);
16. Напишите SQL-запрос, чтобы получить полные имена сотрудников, заменив пробел на символ ‘-‘.
Для этого используется функция REPLACE
:
SELECT REPLACE(FullName, ' ', '-') FROM EmployeeDetails;
17. Напишите SQL-запрос, чтобы определить позицию заданного символа (символов) в поле.
Для этого можно использовать функцию INSTR
:
SELECT INSTR(FullName, 'Snow') FROM EmployeeDetails;
18. Напишите SQL-запрос, чтобы вывести оба значения EmpId
и ManagerId
в одной строке.
Здесь мы можем использовать команду CONCAT
:
SELECT CONCAT(EmpId, ManagerId) AS NewId FROM EmployeeDetails;
19. Напишите запрос, чтобы получить только имя (строку до пробела) из столбца FullName
таблицы EmployeeDetails.
В этом задании нужно сначала найти позицию пробела в поле FullName, а затем извлечь первое имя из поля FullName.
Для определения позиции пробела используем функцию LOCATE
в MySQL и CHARINDEX
в SQL Server, а для строки перед пробелом — функции MID
или SUBSTRING
.
В MySQL используем MID
и LOCATE
:
SELECT MID(FullName, 1, LOCATE(' ',FullName)) FROM EmployeeDetails;
В SQL Server используем SUBSTRING
и CHARINDEX
:
SELECT SUBSTRING(FullName, 1, CHARINDEX(' ',FullName)) FROM EmployeeDetails;
20. Напишите SQL-запрос, чтобы вывести имя сотрудника в верхнем регистре, а значения города в нижнем регистре.
Мы можем использовать функции UPPER
и LOWER
:
SELECT UPPER(FullName), LOWER(City) FROM EmployeeDetails;
21. Напишите SQL-запрос, чтобы посчитать количество вхождений определённого символа — 'n'
— в поле FullName
.
Здесь мы можем использовать функцию LENGTH
. Мы вычитаем длину поля FullName
после удаления символов 'n'
из исходной длины поля FullName
.
SELECT FullName, LENGTH(FullName) - LENGTH(REPLACE(FullName, 'n', '')) FROM EmployeeDetails;
22. Напишите SQL-запрос для обновления имен сотрудников путем удаления ведущих и завершающих пробелов.
Для этого используем команду UPDATE
вместе с функциями LTRIM
и RTRIM
:
UPDATE EmployeeDetails SET FullName = LTRIM(RTRIM(FullName));
23. Напишите SQL-запрос для обновления значения зарплаты, увеличив её на 10% для сотрудников и на 5% для менеджеров.
Здесь используется оператор CASE
внутри UPDATE
, чтобы применить разные условия обновления:
UPDATE EmployeeSalary SET Salary = CASE WHEN EmpId IN ( SELECT DISTINCT ManagerId FROM EmployeeDetails WHERE ManagerId IS NOT NULL ) THEN Salary * 1.05 -- Менеджер ELSE Salary * 1.10 -- Сотрудник END;
24. Напишите SQL-запрос для получения всех сотрудников, которые не работают ни над одним проектом.
Это один из базовых вопросов на собеседованиях, цель которого — проверить знание часто используемого оператора IS NULL
.
SELECT EmpId FROM EmployeeSalary WHERE Project IS NULL;
25. Напишите SQL-запрос для получения имён сотрудников, чья зарплата больше либо равна 5000 и меньше либо равна 10000.
В этом случае мы используем оператор BETWEEN
в блоке WHERE
, чтобы выбрать EmpId
сотрудников, соответствующих критерию по зарплате, а затем используем результат в подзапросе для получения FullName
сотрудника из таблицы EmployeeDetails.
SELECT FullName FROM EmployeeDetails WHERE EmpId IN (SELECT EmpId FROM EmployeeSalary WHERE Salary BETWEEN 5000 AND 10000);
26. Напишите SQL-запрос для получения всех данных о сотрудниках из таблицы EmployeeDetails, которые присоединились к компании в 2020 году.
В данном случае используется оператор BETWEEN
для фильтрации по диапазону дат: с ’01-01-2020′ по ’31-12-2020′.
SELECT * FROM EmployeeDetails WHERE DateOfJoining BETWEEN '2020-01-01' AND '2020-12-31';
Также можно извлечь только год из даты присоединения при помощи функции YEAR
(в MySQL).
SELECT * FROM EmployeeDetails WHERE YEAR(DateOfJoining) = '2020';
27. Напишите SQL-запрос для получения всех записей о сотрудниках из таблицы EmployeeDetails, у которых есть запись о зарплате в таблице EmployeeSalary.
Используем оператор EXISTS
:
SELECT * FROM EmployeeDetails E WHERE EXISTS (SELECT * FROM EmployeeSalary S WHERE E.EmpId = S.EmpId);
28. Напишите SQL-запрос, чтобы получить количество сотрудников по каждому проекту, отсортированное по убыванию этого количества.
Запрос содержит два требования: сначала получить количество сотрудников на каждый проект, а затем отсортировать результат по этому количеству.
Для подсчёта количества сотрудников по проектам используется оператор GROUP BY
, а для сортировки — оператор ORDER BY
с использованием псевдонима EmpProjectCount
, заданного для количества сотрудников, и ключевого слова DESC
(“по убыванию”).
SELECT Project, count(EmpId) EmpProjectCount FROM EmployeeSalary GROUP BY Project ORDER BY EmpProjectCount DESC;
29. Напишите SQL-запрос для получения имен сотрудников и записей об их зарплате. Необходимо отобразить данные о сотрудниках, даже если у них нет записи о зарплате.
Это один из самых распространённых вопросов на собеседовании, с помощью которого интервьюер проверяет базовые знания об операторах JOIN в SQL.
В данном случае можно использовать LEFT JOIN
, указав таблицу EmployeeDetails в качестве левой при соединении с таблицей EmployeeSalary.
SELECT E.FullName, S.Salary FROM EmployeeDetails E LEFT JOIN EmployeeSalary S ON E.EmpId = S.EmpId;
30. Напишите SQL-запрос для объединения трёх таблиц.
Предположим, у нас есть три таблицы: Table A, Table B и Table C. Мы можем использовать два оператора JOIN.

SELECT column1, column2 FROM TableA JOIN TableB ON TableA.Column3 = TableB.Column3 JOIN TableC ON TableA.Column4 = TableC.Column4;
🔥 Хочешь больше SQL Задачек??? 🔥
В канале SqlQuestions более 1000 разных SQL задач с ответами. Переходи и посмотри
Вопросы по SQL-запросам для опытных специалистов
Эти вопросы охватывают SQL-запросы, которые связаны с продвинутыми концепциями JOIN, выбором дубликатов строк, нечётных и чётных строк, поиском n-й по величине зарплаты и т. д.
31. Напишите SQL-запрос, чтобы получить всех сотрудников, которые также являются менеджерами, из таблицы EmployeeDetails.
В этом случае нужно использовать самосоединение, т.к. требуется анализировать таблицу EmployeeDetails, как если бы это были две разные таблицы. Мы используем разные псевдонимы: E
— для сотрудников и M
— для менеджеров.
SELECT DISTINCT E.FullName FROM EmployeeDetails E INNER JOIN EmployeeDetails M ON E.EmpID = M.ManagerID;
32. Напишите SQL-запрос, чтобы получить дубликаты записей из таблицы EmployeeDetails (не учитывая первичный ключ – EmpId
).
Для поиска дубликатов мы можем использовать GROUP BY
по всем полям, кроме EmpId
, и с помощью условия HAVING
выбрать только те поля, у которых количество записей больше 1, то есть повторяющиеся записи.
SELECT FullName, ManagerId, DateOfJoining, City, COUNT(*) FROM EmployeeDetails GROUP BY FullName, ManagerId, DateOfJoining, City HAVING COUNT(*) > 1;
33. Напишите SQL-запрос для удаления дубликатов из таблицы без использования временной таблицы.
Здесь мы можем использовать оператор DELETE
с псевдонимами и INNER JOIN
. Сравним все записи, у которых совпадают значения во всех полях кроме EmpId
, и удалим те, у которых EmpId
больше.
DELETE E1 FROM EmployeeDetails E1 INNER JOIN EmployeeDetails E2 WHERE E1.EmpId > E2.EmpId AND E1.FullName = E2.FullName AND E1.ManagerId = E2.ManagerId AND E1.DateOfJoining = E2.DateOfJoining AND E1.City = E2.City;
34. Напишите SQL-запрос для выборки только нечётных строк из таблицы.
Если в таблице есть автоинкрементное поле, например EmpId
, то можно просто использовать следующий запрос:
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) <> 0;
Если такого поля нет, можно использовать следующие запросы.
В SQL Server используя функцию ROW_NUMBER()
проверяем, что остаток от деления на 2 равен 1:
SELECT E.EmpId, E.Project, E.Salary FROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary ) E WHERE E.RowNumber % 2 = 1;
В MySQL можно использовать пользовательскую переменную:
SELECT * FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 1;
35. Напишите SQL-запрос, чтобы выбрать только чётные строки из таблицы.
Если у таблицы есть поле с автоинкрементом, например, EmpId
, можно просто использовать следующий запрос:
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) = 0;
Если такого поля нет, можно использовать следующие запросы:
Используя ROW_NUMBER()
в SQL Server, проверяем, что остаток от деления на 2 равен 0:
SELECT E.EmpId, E.Project, E.Salary FROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary ) E WHERE E.RowNumber % 2 = 0;
Используем пользовательскую переменной в MySQL:
SELECT * FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 0;
36. Напишите SQL-запрос для создания новой таблицы с данными и структурой, скопированными из другой таблицы.
Для этого можно использовать следующий запрос:
CREATE TABLE NewTable SELECT * FROM EmployeeSalary;
37. Напишите SQL-запрос для создания пустой таблицы с такой же структурой, как у другой таблицы.
Здесь мы можем использовать тот же запрос, что и выше, с условием WHERE
, которое всегда ложно.
CREATE TABLE NewTable SELECT * FROM EmployeeSalary WHERE 1=0;
38. Напишите SQL-запрос для получения топ-N записей.
В MySQL для этого используем оператор LIMIT
:
SELECT * FROM EmployeeSalary ORDER BY Salary DESC LIMIT N;
В SQL Server используется ключевое слово TOP
:
SELECT TOP N * FROM EmployeeSalary ORDER BY Salary DESC;
39. Напишите SQL-запрос для получения N-й по величине зарплаты из таблицы.
Используем ключевое слово TOP
в SQL Server:
SELECT TOP 1 Salary FROM ( SELECT DISTINCT TOP N Salary FROM Employee ORDER BY Salary DESC ) ORDER BY Salary ASC;
Используем оператор LIMIT
в MySQL:
SELECT Salary FROM Employee ORDER BY Salary DESC LIMIT N-1,1;
40. Напишите SQL-запрос для получения 3-й по величине зарплаты из таблицы без использования операторов TOP
или LIMIT
.
Это один из самых популярных вопросов на собеседованиях. Для его решения используется коррелированный подзапрос.
Чтобы найти третью по величине зарплату, мы ищем значение зарплаты, для которого вложенный запрос возвращает количество 2, т.е. количество разных зарплат, которые больше этой.
SELECT Salary FROM EmployeeSalary Emp1 WHERE 2 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
Для получения N-й по величине зарплаты:
SELECT Salary FROM EmployeeSalary Emp1 WHERE N-1 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
Вопросы по SQL-запросам на основе различных сценариев
Рассмотрим несколько вопросов для собеседований, основанных на различных сценариях. Вопросы имеют разный уровень сложности и их цель — подготовить вас к решению реальных практических задач.
41. Дана таблица SalesData с колонками: SaleID
, ProductID
, RegionID
, SaleAmount
.
Напишите запрос, который вычислит общий объём продаж для каждого продукта в каждом регионе.
Мы суммируем значение SaleAmount
для каждой комбинации ProductID
и RegionID
, чтобы получить общее количество продаж по каждому продукту в разрезе регионов.
SELECT ProductID, RegionID, SUM(SaleAmount) AS TotalSales FROM SalesData GROUP BY ProductID, RegionID;
42. Напишите запрос для поиска сотрудников, которые зарабатывают больше своих менеджеров.
Здесь мы напишем запрос, который выполняет самосоединение таблицы EmployeeDetails, чтобы сравнить зарплаты сотрудников с зарплатами их менеджеров.
SELECT E.Name AS EmployeeName, M.Name AS ManagerName, E.Salary AS EmployeeSalary, M.Salary AS ManagerSalary FROM EmployeeDetails E JOIN EmployeeDetails M ON E.ManagerID = M.EmployeeID WHERE E.Salary > M.Salary;
43. Дана таблица BookCheckout со столбцами – CheckoutID
, MemberID
, BookID
, CheckoutDate
, ReturnDate
.
Напишите SQL-запрос, чтобы найти количество книг, взятых каждым участником.
SELECT MemberID, COUNT(*) AS NumberOfBooksCheckedOut FROM BookCheckout GROUP BY MemberID;
44. Дана таблица StudentGrades со столбцами – StudentID
, CourseID
, Grade
.
Напишите запрос, чтобы найти студентов, получивших оценку ‘A’ более чем по трём курсам.
Здесь напишем запрос, который отфильтрует студентов по оценке ‘A’, а затем сгруппирует их по StudentID
, подсчитывая количество оценок ‘A’ по каждому студенту.
SELECT StudentID FROM StudentGrades WHERE Grade = 'A' GROUP BY StudentID HAVING COUNT(*) > 3;
45. Дана таблица OrderDetails с колонками: OrderID
, CustomerID
, ProductID
, OrderDate
, Quantity
, Price
.
Напишите запрос для нахождения средней стоимости заказа для каждого клиента.
Приведенный ниже запрос вычисляет среднюю стоимость заказа (количество, умноженное на цену) для каждого клиента.
SELECT CustomerID, AVG(Quantity * Price) AS AvgOrderValue FROM OrderDetails GROUP BY CustomerID;
46. Дана таблица PatientVisits со столбцами VisitID
, PatientID
, DoctorID
, VisitDate
, Diagnosis
.
Напишите запрос, чтобы найти дату последнего визита для каждого пациента.
SELECT PatientID, MAX(VisitDate) AS LatestVisitDate FROM PatientVisits GROUP BY PatientID;
47. Дана таблица FlightBookings со столбцами – BookingID
, FlightID
, PassengerID
,BookingDate
, TravelDate
, Class
.
Напишите запрос для подсчёта количества бронирований для каждого класса.
Здесь мы группируем записи по колонке Class
и считаем количество бронирований в каждом классе.
SELECT Class, COUNT(*) AS NumberOfBookings FROM FlightBookings GROUP BY Class;
48. Дана таблица FoodOrders со столбцами – OrderID
, TableID
, MenuItemID
, OrderTime
, Quantity
.
Напишите запрос для поиска самого часто заказываемого блюда.
Для решения задачи группируем записи по MenuItemID
, сортируем по количеству заказов в порядке убывания и выбираем верхнюю запись.
SELECT MenuItemID FROM FoodOrders GROUP BY MenuItemID ORDER BY COUNT(*) DESC LIMIT 1;
49. Дана таблица Transactions со столбцами – TransactionID
, CustomerID
, ProductID
, TransactionDate
, Amount
.
Напишите запрос для подсчета общей суммы транзакций за каждый месяц.
Приведённый ниже запрос суммирует значения Amount
по каждому месяцу, что позволяет получить общую сумму транзакций за месяц.
SELECT MONTH(TransactionDate) AS Month, SUM(Amount) AS TotalAmount FROM Transactions GROUP BY MONTH(TransactionDate);
50. Дана таблица EmployeeAttendance со столбцами – AttendanceID
, EmployeeID
, Date
, Status
.
Напишите запрос, чтобы найти сотрудников, которые отсутствовали более 5 раз в месяц.
Данный запрос выбирает записи с отсутствием (Status = ‘Absent’), группирует их по сотруднику и месяцу, считает количество отсутствий и фильтрует тех, у кого их больше 5.
SELECT EmployeeID, MONTH(Date) AS Month, COUNT(*) AS Absences FROM EmployeeAttendance WHERE Status = 'Absent' GROUP BY EmployeeID, MONTH(Date) HAVING COUNT(*) > 5;
На этом мы завершаем нашу статью о часто задаваемых вопросах и ответах на собеседовании по SQL-запросам. Я надеюсь, что вы отработаете эти вопросы и добьетесь успеха на интервью по базам данных.