我之前提出了一个问题,但由于我注意到没有显示足够的详细信息,所以我删除了它。我带着我遇到的问题的详细信息回来了。
问题更多与“如何”构建查询有关。
这里是关于我的问题的一些细节。
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 的了解越来越多,但这个问题很快就需要解决方案(我的工作有点依赖于找到这样的解决方案)。
在此先感谢大家,非常感谢任何建议/帮助/评论。
最佳答案
上面的表格定义是否准确完整?您似乎漏掉了几列(制造商名称)?
根据我对您要求的了解,我认为您根本不需要使用 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 表中列出的所有产品记录的成本、价格和利润,并按制造商名称分组。
如果您只想要按制造商分组的每种产品的总成本、价格和利润,您会希望在产品表上以类似的方式完成所有操作。
关于MySQL 建议和对我试图解决的以下数据拉取的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409919/