MySQL关于以下数据的建议和解释拉我正试图解决

时间:2013-10-16 17:29:21

标签: mysql sql

我之前提出了一个问题,但因为我删除了它,因为我注意到没有显示足够的细节。我回来了解有关我遇到的问题的详细信息。

问题更多地与“我如何”构建查询有关。

以下是有关我的问题的一些细节。

TABLE: orders 
    `orders_id`

TABLE: orders_products
    `orders_products_id`
    `orders_id`
    `products_id`

TABLE: products
    `products_id`
    `manufacturers_id`
    `products_price`
    `products_cost`

TABLE: manufacturers
    `manufacturers_id`

我需要输出的是;

对于每个manufacturer_id,所有products_price的总和,所有products_costproducts_profit的总和,都来自它们(也就是价格 - 成本) =利润)。

我所做的是:

SELECT  m.manufacturers_id, m.manufacturers_name,
SUM(p.products_price1)      as 'brand_sales',
SUM(p.products_cost)        as 'brand_cost'

FROM    orders o

LEFT JOIN orders_products op
ON o.orders_id = op.orders_id

LEFT JOIN products p
ON op.products_id = p.products_id

LEFT JOIN manufacturers m
ON p.manufacturers_id = m.manufacturers_id

GROUP BY   m.manufacturers_name

这就是我想要的,尽管不正确。它确实撤回了必要的数据,但价格,成本和利润领域的价值似乎大约是预期的15倍,我不知道如何应对。我对SQL的了解正在增长,但这个问题很快就需要一个解决方案(我的工作依赖于找到这样的解决方案)。

先谢谢你们,非常感谢任何adivce / help / comments。

1 个答案:

答案 0 :(得分:1)

上面的表格定义是否准确完整?您似乎可能缺少一些列(制造商的名称)?

根据我的要求,我认为你根本不需要使用orders表,只需使用orders_products表。

如果订单和orders_products之间存在一对多关系,并且您不需要该表中的任何其他列,请继续尝试不带订单表的查询:

select  m.manufacturers_name
    ,   sum(p.products_cost) as cost
    ,   sum(p.products_price) as price
    ,   sum(p.products_price)-sum(p.products_cost) as profit
from    order_products op inner join products p on op.products_id = p.products_id
    inner join manufacturers m on p.manufacturers_id = m.manufacturers_id
group by m.manufacturers_name

这应该获得orders_products表中列出的所有产品记录的成本,价格和利润,按制造商的名称分组。

如果您只想要按制造商分组的每种产品中的一种产品的总成本,价格和利润,您希望在产品表上类似地完成整个事情。