Вопрос немного двусмысленный. Похоже, вы хотите один ряд на ингредиент. Неясно, что означает «общая сумма для каждого элемента», поэтому давайте сделаем как общую цену, так и количество.
Тогда, если вы хотите получить итоги, что такое «заказанная дата»? Там может быть несколько дат. Итак, позвольте мне интерпретировать это как «самая последняя заказанная дата».
В вашем запросе просто отсутствует JOIN
. Никогда не используйте запятые в предложении FROM
. Всегда используйте правильный, явный, стандартный синтаксис JOIN
. :
SELECT i.ingredient_id, i.ingredient_name,
SUM(ip.quantity) as total_quantity,
SUM(ip.unit_price * ip.quantity) as total_price
FROM ingredient_purchase_list ip JOIN
ingredient i
ON i.ingredient_id = ip.ingredient_id
WHERE ip.date_ordered >= DATE '2019-11-01' AND
ip.date_ordered < DATE '2019-12-01'
GROUP BY ip.date_ordered, i.ingredient_name
ORDER BY MAX(ip.date_ordered);
Наконец, вы заметите, что я изменил логику даты. Тип данных Oracle date
имеет компонент времени, который часто невидим в результатах запроса. Чтобы быть в безопасности, используйте логику неравенства вместо between
, чтобы не пропустить результаты последнего дня месяца.