SQL - 无法正确计算SUM

时间:2016-04-02 02:28:16

标签: mysql sql

我一直在尝试这个SQL语句。

我有一个销售数据库,我需要做的就是:

SELECT 
  SUM(orders.total) as total, orders.transaction_date as date, 
  orders.id as orderid, orders.employee_id as empl 
from orders GROUP by orders.employee_id

这个查询很完美,它给了我所需要的一切。但是,我需要添加到目前为止销售的数量,以便与此查询相对应:

SELECT order_id, SUM(quantity) 
FROM order_items 
Group By order_id

哪个也好。两者都很完美,但我需要将它们放入一个sql语句中。

当我尝试

SELECT 
  SUM(order_items.quantity), 
  SUM(orders.total) as total, 
  orders.transaction_date as date, 
  orders.id as orderid, 
  orders.employee_id as empl 
from 
  orders, order_items 
where 
  order_items.order_id = orders.id 
GROUP by 
  orders.employee_id

除了总数之外,一切似乎都是正确的。我不知道为什么会这样。

这是数据库

订单:

id | employee_id | transaction_date | total

ORDER_ITEMS:

order_id | quantity

3 个答案:

答案 0 :(得分:2)

你需要在加入它们之前单独聚合两个表

select sum(oi.quantity), sum(o.total) as total, 
       o.employee_id as empl 
from orders o join
     (select oi.order_id, sum(oi.quantity) as quantity 
      from order_items oi
      group by oi.order_id
     ) oi
     on oi.order_id = o.id 
group by o.employee_id;

select中包含交易日期和订单ID没有意义。您按员工ID进行聚合,因此这些列可能(可能)有多个值。

答案 1 :(得分:0)

您加入order_id,但按orders.employee_id分组。对于给定的订单,所有order_items是否都拥有相同的员工?没有GROUP BY检查您的关系。我怀疑employee_idorders之间的order_items是否一致。发布您的数据样本可能有助于更好地了解该问题。

答案 2 :(得分:0)

前两个查询之间有两个不同的GROUP BY语句,但它们都没有反映在合并查询中。

SELECT 
  SUM(order_items.quantity) as quantity, 
  SUM(orders.total) as total, 
  orders.transaction_date as date, 
  orders.id as orderid, 
  orders.employee_id as empl 
from 
  orders
LEFT JOIN
  order_items
ON
  orders.order_id = order_items.order_id
where 
  order_items.order_id = orders.id 
GROUP by 
  orders.employee_id, orders.order_id

但是,此查询仍然没有意义。每行将是一个employee_id下所有订单和订单商品的摘要。因此,选择transaction_date或order id是没有意义的,因为这只会给你聚合中的第一个订单。