MYSQL查询将不同表中的多个列相加

时间:2012-04-06 20:34:36

标签: php mysql join where-clause

我有两个表(order,order_lines),有一对多的关系。订单表将有一行,order_lines表对于附加到订单的每个产品都有一行。

订单

   +----------+-------------+---------------+
   |order_num | total_order | shipping_total|
   +----------+-------------+---------------+
   | 12345    | 75.00       | 15.00         |
   +----------+-------------+---------------+

ORDER_LINES

   +----------+-------------+-------+
   | order_num| volume      | price |
   +----------+-------------+-------+
   | 12345    |10           |25.00  |
   +----------+-------------+-------+
   | 12345    |20           |25.00  |
   +----------+-------------+-------+
   | 12345    |20           |25.00  |
   +----------+-------------+-------+

我想总算一下total_order& ORDERS表中的shipping_total列和音量& ORDER_LINES表中的价格列。

查询当前无效:

SELECT b_orders.bill_country, b_orders.ship_country
    , SUM(volume) AS v, SUM(price) AS pt
    , SUM(shipping_total) AS st, SUM(total_order) AS tot_o 
FROM b_orders 
JOIN b_order_lines 
    ON b_orders.order_num = b_order_lines.order_num 
WHERE DATE(b_orders.order_date) BETWEEN '2012-04-02' AND '2012-04-06' 
    AND ship_country = 'USA' 
    AND b_order_lines.price > 0;

此查询返回错误的值。我知道为什么但不知道如何编写正确的查询...请帮助。

2 个答案:

答案 0 :(得分:3)

当您使用聚合函数行SUM时,您需要告诉SQL服务器将GROUP BY用于执行求和的列将用于哪些列。

因此,如果您将以下内容添加到查询的底部:

GROUP BY
  b_orders.bill_country, b_orders.ship_country

这将告诉它为数据中bill_country, ship_country的每个唯一组合提供总和。这是你在找什么?

答案 1 :(得分:0)

如果bill_country和ship_country将包含在也具有SUM等聚合函数的查询中,则需要对它们进行分组。我怀疑你需要的是在最后添加这一行:

GROUP BY  b_orders.bill_country, b_orders.ship_country;

如果您不需要查看它们,可以从SELECT语句中删除它们并省略分组;您不必选择列以将它们包含在WHERE子句中。