我有两个表(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;
此查询返回错误的值。我知道为什么但不知道如何编写正确的查询...请帮助。
答案 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子句中。