2
mysql> select * from orders;
+---------+------------+------------+------------+----------+----------+
| orderid | customerid | orderdate  | shipdate   | shipping | salestax |
+---------+------------+------------+------------+----------+----------+
|       1 |          1 | 2008-03-31 | 2008-03-31 |     4.99 |     5.00 | 
|       2 |          1 | 2008-04-01 | 2008-04-02 |     5.99 |     5.00 | 
|       3 |          2 | 2008-04-01 | 2008-04-02 |     3.99 |     6.00 | 
|       4 |          3 | 2008-04-02 | 2008-04-02 |     6.99 |     7.50 | 
+---------+------------+------------+------------+----------+----------+
4 rows in set (0.02 sec)
mysql> select * from orderinfo;
+---------+------------+-----+-------+----------+
| orderid | isbn       | qty | price | detailid |
+---------+------------+-----+-------+----------+
|       1 | 0929306279 |   1 | 29.95 |        1 | 
|       1 | 0929306260 |   1 | 49.95 |        2 | 
|       2 | 0439357624 |   3 | 16.95 |        3 | 
|       3 | 0670031844 |   1 | 34.95 |        4 | 
|       4 | 0929306279 |   1 | 29.95 |        5 | 
|       4 | 0929306260 |   1 | 49.95 |        6 | 
|       4 | 0439357624 |   1 | 16.95 |        7 | 
|       4 | 0670031844 |   1 | 34.95 |        8 | 
+---------+------------+-----+-------+----------+
8 rows in set (0.00 sec)

我试图将订单信息表中的数量和价格相乘,然后在我尝试将它们倍增时添加订单表中的运费,但当我添加运费时,我得到的值不正确

这行得通

mysql> select orders.orderid,sum(orderinfo.qty*orderinfo.price) as order_total from orders
    -> inner join orderinfo
    -> on orders.orderid=orderinfo.orderid
    -> group by orderid;
+---------+-------------+
| orderid | order_total |
+---------+-------------+
|       1 |       79.90 | 
|       2 |       50.85 | 
|       3 |       34.95 | 
|       4 |      131.80 | 
+---------+-------------+
4 rows in set (0.00 sec)

这给出了不正确的值

mysql> select orders.orderid,sum(orderinfo.qty*orderinfo.price+orders.shipping) as order_total from orders
    -> inner join orderinfo
    -> on orders.orderid=orderinfo.orderid
    -> group by orderid;
+---------+-------------+
| orderid | order_total |
+---------+-------------+
|       1 |       89.88 | 
|       2 |       56.84 | 
|       3 |       38.94 | 
|       4 |      159.76 | 
+---------+-------------+
4 rows in set (0.00 sec)
4

1 回答 1

2

您正在应用聚合中的shipping速率SUM(),当您确实需要之后将其添加到SUM(). 这具有为聚合组的每一shipping行添加值的效果,即 为 的双倍运费和 4 倍运费。orderid = 1orderid = 4

您可以通过添加shipping来做到这一点GROUP BY(实际上 MySQL 不需要这样做,但这是一个很好的做法)。

SELECT
  orders.orderid,
  /* Add `shipping` outside the SUM() aggregate */
  SUM(orderinfo.qty*orderinfo.price) + orders.shipping AS order_total 
FROM orders
  INNER JOIN orderinfo ON orders.orderid = orderinfo.orderid
GROUP BY
  orderid,
  shipping

这是SQLFiddle.com 上的一个示例。

于 2012-12-09T00:05:58.790 回答