不同行的列总和

时间:2019-01-23 23:22:28

标签: mysql

我具有以下MySQL表结构

 id          product_id    order_id   order_shipping   shipping_code
  1               23            1            2.00           GB
  2               12            1            2.00           GB
  3               5             2            3.50           GB
  4               6             2            3.50           GB
  5               34            3            3.00           FR
  6               8             3            3.00           FR
  7               4             4            5.00           IN

我想按shipping_code对行进行分组,并包括每个代码的总订单和总运输成本。像这样:

Code    Orders   Cost
 GB       2       5.50
 FR       1       3.00
 IN       1       5.00

我在总费用中苦苦挣扎。运输成本是针对整个订单的,而不是产品的运费。只是在与同一订单有关的每一行中重复了一次。因此,对于订单1,运费为£2,而不是£4。

我如何对该列求和,但仅对不同的订单行求和?

1 个答案:

答案 0 :(得分:1)

要解决每个订单重复的运费,您需要先按order_id对数据进行分组,然后按COUNT的订单数量和SUM的运费进行分组:

SELECT code, COUNT(o.shipping) AS orders, SUM(o.shipping) AS cost
FROM (SELECT MIN(shipping_code) AS code, MIN(order_shipping) AS shipping
      FROM orders
      GROUP BY order_id) o
GROUP BY code

输出:

code    orders  cost
GB      2       5.5
FR      1       3
IN      1       5

{{3}}