我有两张表,一个存储我们购买的产品和数量,另一个存储销售量。因此当前库存是买入表中所有数量列的总和减去销售表中的行数。这怎么能在MySQL中表达。请记住,有很多不同的产品。查找MySQL中两个表的行数差异
编辑: 为了让它更难,我有另一个要求。我有买桌子,卖桌子,但我也有产品桌子。我想要一份所有产品的清单,并且我想知道每种产品的可用数量。目前的答案是,他们只返回我们已经出售或购买的产品。我想要所有的产品。
我有两张表,一个存储我们购买的产品和数量,另一个存储销售量。因此当前库存是买入表中所有数量列的总和减去销售表中的行数。这怎么能在MySQL中表达。请记住,有很多不同的产品。查找MySQL中两个表的行数差异
编辑: 为了让它更难,我有另一个要求。我有买桌子,卖桌子,但我也有产品桌子。我想要一份所有产品的清单,并且我想知道每种产品的可用数量。目前的答案是,他们只返回我们已经出售或购买的产品。我想要所有的产品。
试试这个
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的函数,它返回第一个参数的值,除非它为空,在这种情况下,它将返回第二个参数的值。在所有商业DBMS中都有相同的功能 - 你可以在MySQL中使用CASE来达到同样的效果。
我认为你的意思inv_t.product在第一行。 – Marius 2008-10-28 12:59:10
SELECT product AS prd,
SUM(quantity) -
IFNULL((SELECT COUNT(*)
FROM sells
WHERE product = prd
GROUP BY product), 0)
AS stock
FROM bought
GROUP BY product;
这其中也工作时卖出量为0
我建议把“库存”和“销售”表到的意见,让他们可重复使用和最终的查询变得非常简单。显然,字段和表名将需要更改以匹配您的模式。
--First view: list products and the purchased qty
create or replace view product_purchases as
select
product_id
,sum(purchased_qty) as purchased_qty
from
purchases
group by
product_id;
--Second view: list of products and the amount sold
create or replace view product_sales as
select
product_id
,count(*) as sales_qty
from
sales
group by
product_id;
--after creating those two views, run this query:
select
pp.product_id
,pp.purchased_qty - ps.sales_qty as on_hand_qty
from
product_purchases pp
,product_sales ps
where ps.product_id = pp.product_id;
总和http://stackoverflow.com/questions/826365/how-do-i-add-two-count-results-together-on-two-different-tables – 2016-05-20 21:01:52