1

我早些时候提出了一个问题,但由于我注意到它没有显示足够的细节,所以我删除了它。我回来了有关我遇到的问题的详细信息。

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

以下是有关我的问题的一些详细信息。

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_cost然后是products_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 的了解越来越多,但这个问题很快需要一个解决方案(我的工作有点依赖于找到这样的解决方案)。

在此先感谢伙计们,真的非常感谢任何建议/帮助/评论。

4

1 回答 1

1

上面的表格定义是否准确完整?看来您可能缺少几列(制造商名称)?

根据我对您的要求的了解,我认为您根本不需要使用 orders 表,只需要使用 orders_products 表。

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

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 表中列出的所有产品记录的成本、价格和利润。

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

于 2013-10-16T17:58:36.610 回答