我之前提出了一个问题,但因为我删除了它,因为我注意到没有显示足够的细节。我回来了解有关我遇到的问题的详细信息。
问题更多地与“我如何”构建查询有关。
以下是有关我的问题的一些细节。
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的了解正在增长,但这个问题很快就需要一个解决方案(我的工作依赖于找到这样的解决方案)。
先谢谢你们,非常感谢任何adivce / help / comments。
答案 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表中列出的所有产品记录的成本,价格和利润,按制造商的名称分组。
如果您只想要按制造商分组的每种产品中的一种产品的总成本,价格和利润,您希望在产品表上类似地完成整个事情。