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