【问题标题】:Calculating Total Sales from Multiple MySQL Tables从多个 MySQL 表计算总销售额
【发布时间】:2013-11-12 23:32:54
【问题描述】:

我试图弄清楚如何确定使用 MySQL 的员工的总销售额。数据库中有 4 个表,可帮助确定总销售额。我能够创建一个查询来选择所有必要的表来计算销售总额。

查询:

SELECT employees.eno, employees.ename, orders.ono, orders.eno, 
    parts.pno, parts.price,odetails.ono, odetails.pno, odetails.qty
FROM test.employees, test.parts, test.orders, test.odetails
WHERE employees.eno = orders.eno AND parts.pno = odetails.pno

这会产生一个表格,其中显示员工的姓名、项目、销售价格。我不知道从这里去哪里。任何帮助将不胜感激!我不确定存储过程是否有帮助,然后我可以在 Java 程序中调用它来打印结果。只是在这里真的很困惑。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 你想要什么输出?
  • 您可以使用SUM 并乘以您的数量字段以获得总数。 sum 的问题在于它还对您的结果进行了分组,在这种情况下,如果您还想要所有这些数据,您可以 join 查询自身以返回记录。如果我是你,我会选择所有记录,然后运行一个单独的查询,选择总销售额(如果您不希望对结果进行分组)
  • 我想根据价格基本找出哪个员工的总销售额最高。价格* 数量。只是不知道该怎么做。

标签: mysql sql


【解决方案1】:

试试:

SELECT employees.eno, employees.ename, SUM(parts.price * odetails.qty) as TotalSales
FROM test.employees
INNER JOIN test.orders
ON empoyee.eno = orders.eno
INNER JOIN test.odetails
ON orders.ono = odetails.ono
INNER JOIN test.parts
ON odetails.pno = parts.pno
GROUP BY employees.eno, employees.ename

【讨论】:

  • 没问题@Bob。我只是希望我的妻子在这里看不到你的评论……哈哈。编码快乐,上帝保佑!
【解决方案2】:

以下应该工作。

SELECT employees.ename, COUNT(employees.ename), (COUNT(employees.ename) * parts.price) FROM test.employees INNER JOIN (orders, parts) ON (employees.eno = orders.eno AND parts.pno = odetails.pno)

【讨论】:

  • 将返回总 number 的销售额(记录数),然后您可以使用服务器端代码添加总数以获得总金额,或者您需要也选择SUM
  • 好的,所以我稍微修改了你的 sql 脚本,它确实给了我正确的销售额。但是,我在数据库中有 4 名员工,我想计算出他们每个人的销售额,然后通过商品的销售价格计算利润。 _SELECT COUNT() FROM test.employees INNER JOIN (orders, parts, odetails) ON (employees.eno = orders.eno AND parts.pno = odetails.pno)_
【解决方案3】:

您应该使用JOINs 将您的所有表格连接在一起,形成适当的结果。这是我从您的查询/数据库结构中可以看出的一个示例,它将返回每个订单,加入订单详细信息、零件信息和员工信息:

SELECT 
* 
FROM test.orders O
LEFT JOIN test.odetails OD ON OD.pno = O.ono
LEFT JOIN test.employees E ON E.eno = O.eno
LEFT JOIN test.parts P ON P.pno = OD.pno

从这里开始,如果您想获得每位员工的总数,您可以执行以下操作:

SELECT
E.eno,
SUM(OD.qty * P.price) AS employee_total
...
GROUP BY E.eno

...应该返回员工编号和每个订单关联的所有价格的总和,乘以每个订单的数量,并按员工编号分组。

然后你可以添加:

ORDER BY employee_total ASC -- or DESC...

从最低到最高排序,反之亦然。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多