MySQL 建议和对我试图解决的以下数据拉取的解释

标签 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_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/

相关文章:

mysql - 如何减少 Prisma 选择(或包含)字段代码行

php - SQLSTATE[23000] : Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

sql - Oracle SQL,在包含另一列字符串的一列中搜索字符串

sql - COUNT(*) 包括空值?

sql - Snowflake SQL 编译器和执行有多懒?

mysql - 查询多个计数值

php - 代码不工作,将 MySQL 结果排序到页面中

mysql - 连接同一个表中的两个外键引用相同的主键

mysql按任何其他字段名称而不是使用按id排序获取上一个或下一个记录顺序

java - 在执行查询且未进行任何更改(自动提交为 "off")后,我们是否需要 commit() 数据库连接?