试试这个
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)
Run Code Online (Sandbox Code Playgroud)
这是一个比发布的其他几个更好的解决方案,它们没有考虑到某些产品在销售表中可能没有任何相应行的事实.您希望确保此类产品也显示在结果中.
NVL是一个特定于Oracle的函数,它返回第一个参数的值,除非它为null,在这种情况下它返回第二个参数的值.在所有商业DBMS中都有相同的功能 - 您可以在MySQL中使用CASE来达到同样的效果.