gpt4 book ai didi

mysql - 如何找到类别的利润

转载 作者:行者123 更新时间:2023-11-30 01:36:00 24 4
gpt4 key购买 nike

我的项目是关于一家珠宝店,我尝试找出每个产品类别的利润。让我更具体一点

我有 3 个表格,其中提供了信息:

销售(销售 ID、产品 ID、数量、价格)

salesid  productid   Quantity Price
11001 13001 4 5
11002 13002 6 10
11003 13003 5 16
.
.
11012 13012 7 15

RETURN(销售 ID、产品 ID、日期、数量、价格)

salesid  productid   Quantity Price
11003 13003 1 16
11007 13007 3 12
11008 13008 3 8

采购(采购ID,产品ID,数量,价格)

procurementid  productid   Quantity Price
100001 13001 10 2
100002 13002 10 2
.
.
100012 13012 10 2

产品类别(类别ID,类别)

categoryid  category
1 Gold
2 Silver
.
5 Platin

产品(产品ID,类别ID)

Productid  categoryid
13001 1
13002 3
.
.
13010 5

利润由此类型给出:

Profit=Quantity*Price(Sell)-Quantity*Price(Return)-Quantity*Price(Procurement)

现在问题来了..到目前为止我已经想到了

SELECT categoryid,
category,
(coalesce(a.rev,0)- coalesce(b.ret,0),
coalesce(c.cost,0)) AS profit
FROM product category AS g
JOIN product AS h ON g.categoryid = h.categoryid
JOIN
(SELECT categoryid,
sum(quantity*price) AS rev
FROM sales AS a,
product AS b
WHERE a.productid = b.productid
GROUP BY categoryid) a
LEFT OUTER JOIN
(SELECT cartegoryid,
sum(quantity*price) AS ret
FROM RETURN AS a ,
product AS b
WHERE a.productid = b.productid
GROUP BY categoryid) b ON a.categoryid = b.categoryid
LEFT OUTER JOIN
(SELECT categoryid,
sum(quantity*price) AS cost
FROM procurement AS a,
product AS b
WHERE a.productid = b.productid
GROUP BY categoryid) c ON a.categoryid = c.categoryid ,
product AS d,
procurement AS e
WHERE MONTH(f.date) = MONTH(e.date)
AND YEAR(date) = 2013

[抱歉,我是该网站的新手,不知道如何复制粘贴代码(:D)]不管怎样,当我这样做时,它会达到这样的状态

categoryid  category  profit
1 Gold -100
2 Silver -100
.
5 Platin -100

不知道问题出在哪里...我做了很多更改和切换,但没有任何结果...任何建议都会很有帮助。谢谢你的建议

最佳答案

最初看起来您的利润公式中多了一个逗号。这个

(coalesce(a.rev,0) - coalesce(b.ret,0),coalesce(c.cost,0)) as profit

应该是这个

coalesce(a.rev,0) - coalesce(b.ret,0) - coalesce(c.cost,0) AS profit

此查询还有几个问题

  • 在连接成本子查询之后,在 where 子句之前添加产品和采购表,但不连接它们。这将导致笛卡尔连接,从而导致结果不正确。
  • 在 where 子句中,您没有指定要使用哪个表的日期字段。 AND YEAR(date) = 2013 应为 e.datef.date。如果您尝试运行它,应该会出现错误。
  • WHERE MONTH(f.date) = MONTH(e.date) f.date 指的是哪个表?您没有为任何表指定别名 f
  • 您加入采购并使用其日期字段按月过滤结果,但您的收入、返回和成本子查询总计均未考虑日期。这会影响你的结果。

关于mysql - 如何找到类别的利润,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16887917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com