Соедините сотрудников с выплатами, сгруппируйте по идентификатору и имени, затем используйте HAVING SUM(...) > N. Группировать только по имени нельзя: однофамильцы могут объединиться.
Выбор работников с суммарными выплатами, превышающими заданный порог
Соедините сотрудников с выплатами, сгруппируйте по идентификатору и имени, затем используйте HAVING SUM(...) > N. Группировать только по имени нельзя: однофамильцы могут объединиться.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Имеются две таблицы: Person, содержащая сведения о сотрудниках, и Payments, где фиксируются их ежемесячные начисления. Требуется сформировать запрос, который вернёт имя сотрудника и общую сумму начислений, если суммарный объём выплат превышает указанное значение N.
Ответ
Соедините сотрудников с выплатами, сгруппируйте по идентификатору и имени, затем используйте HAVING SUM(...) > N. Группировать только по имени нельзя: однофамильцы могут объединиться.
При предполагаемых полях Person(id,name) и Payments(person_id,amount):
SELECT p.name, SUM(pay.amount) AS total_amount
FROM Person p
JOIN Payments pay ON pay.person_id = p.id
GROUP BY p.id, p.name
HAVING SUM(pay.amount) > :N;
Имена ключей нужно адаптировать к схеме. Если выплаты в разных валютах, их нельзя складывать без отдельного правила пересчёта. Условие не задаёт период, поэтому запрос суммирует все строки; фильтр даты при необходимости добавляют до группировки.