Попробуйте это
SELECT inv_t.product_id, inventory_total-nvl(sales_total,0)
FROM
(SELECT product_id, sum(quantity) as inventory_total
FROM inventory
GROUP BY product_id) inv_t LEFT OUTER JOIN
(SELECT product_id, count(*) AS sales_total
FROM sales
GROUP BY product_id) sale_t
ON (inv_t.product_id = sale_t.product_id)
Это лучшее решение, чем несколько других опубликованных, которые не учитывают тот факт, что некоторые продукты могут не иметь соответствующих строк в таблице продаж. Вы хотите убедиться, что такие продукты также отображаются в результатах.
NVL - это специфичная для Oracle функция, которая возвращает значение первого аргумента, если оно не равно нулю, и в этом случае возвращает значение второго аргумента. Во всех коммерческих СУБД есть эквивалентные функции - вы можете использовать CASE в MySQL для того же эффекта.