26. Рыбы с суммарным уловом на дату 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;