27. Рыбы с суммарным уловом на дату d менее n #
Условие задачи:
📌 Есть таблицы:
- fish (
id
,name
) - catch (
id
,fish_id
,dt
,quantity
)
Необходимо вывести наименования рыб, для которых суммарный улов на указанную дату d
меньше чем n
.
Спойлеры к решению
Подсказки
💡 Фильтр по дате делается в
💡 Суммарный улов считаем через
💡 Используйте
💡 Во втором варианте можно применить подзапрос либо LEFT JOIN и фильтрацию по агрегату.
WHERE dt = :d
.💡 Суммарный улов считаем через
SUM(quantity)
и группировку по fish_id
.💡 Используйте
HAVING SUM(quantity) < :n
для первой реализации.💡 Во втором варианте можно применить подзапрос либо LEFT JOIN и фильтрацию по агрегату.
Решение
– Решение 1: GROUP BY + HAVING
SELECT f.name
FROM fish f
JOIN catch c ON f.id = c.fish_id
WHERE c.dt = :d
GROUP BY f.name
HAVING SUM(c.quantity) < :n;
– Решение 2: Подзапрос в WHERE
SELECT f.name
FROM fish f
WHERE (
SELECT COALESCE(SUM(c.quantity), 0)
FROM catch c
WHERE c.fish_id = f.id
AND c.dt = :d
) < :n;