Топ-50 вопросов по SQL-запросам на собеседовании

Перевод статьи «Top 50 SQL Query Interview Questions and Answers for Practice».

В этой статье собраны одни из самых распространённых SQL-запросов, которые часто встречаются на собеседованиях. Если хотите пропустить базовый уровень и сразу перейти к более сложным задачам, откройте раздел для опытных специалистов.

Содержание:

Рассмотрите следующие две таблицы в качестве справочных, выполняя практические задания по SQL-запросам.

Таблица – EmployeeDetails

EmpIdFullNameManagerIdDateOfJoiningCity
121John Snow32101/31/2019Toronto
321Walter White98601/30/2020California
421Kuldeep Rana87627/11/2021New Delhi

Таблица – EmployeeSalary

EmpIdProjectSalaryVariable
121P18000500
321P2100001000
421P1120000

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

  1. SQL-запрос для получения записей, которые присутствуют в одной таблице, но отсутствуют в другой.
  2. SQL-запрос для получения всех сотрудников, которые не работают ни над одним проектом.
  3. SQL-запрос для получения всех сотрудников из таблицы EmployeeDetails, которые присоединились к компании в 2020 году.
  4. Получите из таблицы EmployeeDetails всех сотрудников, у которых есть запись о зарплате в таблице EmployeeSalary.
  5. Напишите SQL-запрос для получения данных о количестве сотрудников по каждому проекту.
  6. Получение имен сотрудников и данных об их зарплате, даже если значение зарплаты для сотрудника отсутствует.
  7. Напишите SQL-запрос для получения всех сотрудников, которые также являются менеджерами.
  8. Напишите SQL-запрос для получения дубликатов записей из таблицы EmployeeDetails.
  9. Напишите SQL-запрос для выборки только нечётных строк из таблицы.
  10. Напишите запрос, чтобы найти 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';

Также можно извлечь только год из даты присоединения при помощи функции YEARMySQL).

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-запросам. Я надеюсь, что вы отработаете эти вопросы и добьетесь успеха на интервью по базам данных.

🔥 Какой была ваша первая зарплата в QA и как вы искали первую работу? 

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Читать в телеграм

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *