【问题标题】:MySQL - Use GROUP BY and SUM to multiply two columnsMySQL - 使用 GROUP BY 和 SUM 将两列相乘
【发布时间】:2020-01-11 04:51:43
【问题描述】:

earlier question 开始,我正在使用依赖于 following schemanext.tech course 学习 MySQL:

我的任务是为每个项目编写一个查询返回:

  • 项目名称为“项目名称”
  • 所有订单的数量总和为“作业订单数量”
  • 所有工作订单“工作订单价格”的总价格,以及
  • 所有作业订单的成本为“成本”

我已经为 Cost 列编写了满足上述所有要求除了的以下查询:

SELECT p.name AS 'Project Name',
       SUM(jo.quantity) AS 'Job Order Quantity',
       SUM(jo.price) AS 'Job Order Price',
       SUM(jo.quantity * jo.price) AS 'Cost'
FROM projects p
JOIN job_orders jo ON p.id = jo.project_id
GROUP BY  name;

第一个项目结果的 Job Order Quantity 为 11790,Job Order Price 为 103617.37,Cost 应将这两个数字相乘为总和 1221648793.19。但是,我的查询返回数字 14321391.34

我不确定后一个数字是多少,也不确定如何更改查询以返回正确的成本数字。

【问题讨论】:

  • 您非常接近,我认为您需要将数量和价格的总和相乘,而不是将数量乘以价格。将您的最后一个选择列更改为SUM(jo.quantity) * SUM(jo.price) as 'Cost',看看这是否能满足您的期望。
  • 我认为您的期望值 1221648793.19 是错误的,没有任何意义,您的查询实际上是正确的。因此,与其说是技术问题,不如说是如何理解问题的问题。无论如何,如果你想得到你的期望值,它将是SUM(jo.quantity) * SUM(jo.price)
  • 是的,此更改产生了正确的结果 - 谢谢!
  • 我同意期望的结果是荒谬的。如果我以 20 便士的价格购买 1 个鸡蛋,以 25 便士的价格购买 3 个苹果,那么总成本是 95 便士,而不是 1.80 英镑(4 x 45)
  • 我假设这个问题不是“常识”,而是更多地试图展示不同的 SQL 函数如何协同工作。很高兴知道这种乘法不太可能在现实生活中出现!

标签: mysql sql


【解决方案1】:

我认为你的课程不会期望你得到结果

sum(quantity) * sum(price)

因为这些总和相乘的结果在任何类型的计算、分析、报告等中都没有任何意义。

sum(quantity * price) group by name

旨在将每个订单的数量乘以价格,然后将每个“项目名称”的金额相加。

另外,你的课程材料是否要求价格总和?

sum(price)

将给出每个“项目名称”的所有价格总和,您不能有效地使用它。

如果您可以从学习课程的问题本身开始您的帖子……那就更好了。但我建议您在继续之前先了解“选择”的语法和解释。

【讨论】:

  • 不幸的是,点是我必须解决的问题。虽然它是对数据库模块的介绍,所以我猜测即使它在实践中是一个毫无意义的计算,其想法是演示 SQL 的一些关键功能。
  • 是的。课程材料通过这些例子来介绍特性。很好。
【解决方案2】:

正如 cmets 中的 patrick3853Olivier Depriester 所指出的,SUM(jo.quantity * jo.price) 行应该改为 SUM(jo.quantity) * SUM (jo.price)

正确查询如下:

SELECT p.name AS 'Project Name',
       SUM(jo.quantity) AS 'Job Order Quantity',
       SUM(jo.price) AS 'Job Order Price',
       SUM(jo.quantity) * SUM(jo.price) AS 'Cost'
FROM projects p
JOIN job_orders jo ON p.id = jo.project_id
GROUP BY  name;

【讨论】:

  • SUM(jo.price) 将给出“工作订单价格”,直到所有数量为 1(一)!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 2014-01-12
  • 2020-04-28
  • 1970-01-01
相关资源
最近更新 更多