Php 用于对不同表中的多个列求和的MYSQL查询
我有两个具有一对多关系的表(订单、订单行)。orders表将有一行,order_lines表将有一行用于订单所附的每个产品 命令Php 用于对不同表中的多个列求和的MYSQL查询,php,mysql,join,where-clause,Php,Mysql,Join,Where Clause,我有两个具有一对多关系的表(订单、订单行)。orders表将有一行,order_lines表将有一行用于订单所附的每个产品 命令 +----------+-------------+---------------+ |order_num | total_order | shipping_total| +----------+-------------+---------------+ | 12345 | 75.00 | 15.00 |
+----------+-------------+---------------+
|order_num | total_order | shipping_total|
+----------+-------------+---------------+
| 12345 | 75.00 | 15.00 |
+----------+-------------+---------------+
订单行
+----------+-------------+-------+
| order_num| volume | price |
+----------+-------------+-------+
| 12345 |10 |25.00 |
+----------+-------------+-------+
| 12345 |20 |25.00 |
+----------+-------------+-------+
| 12345 |20 |25.00 |
+----------+-------------+-------+
我想对ORDERS表中的total_order&shipping_total列和order_LINES表中的volume&price列求和
查询当前不工作:
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;
此查询返回了错误的值。我知道为什么,但不知道如何编写正确的查询…请帮助。当您使用聚合函数行
SUM
时,您需要告诉SQL server将使用哪些列来进行求和
因此,如果将以下内容添加到查询的底部:
GROUP BY
b_orders.bill_country, b_orders.ship_country
这将告诉它为数据中的
bill\u country、ship\u country
的每个唯一组合提供总和。这就是您要寻找的吗?当您使用聚合函数行SUM
时,您需要告诉SQL server哪些列将用于分组,以便执行求和操作
因此,如果将以下内容添加到查询的底部:
GROUP BY
b_orders.bill_country, b_orders.ship_country
这将告诉它为数据中的bill\u country、ship\u country
的每个唯一组合提供总和。这就是您要查找的吗?如果bill\u country和ship\u country将包含在一个查询中,该查询还具有聚合函数(如SUM),则需要对它们进行分组。我想您只需要在末尾添加这一行:
GROUP BY b_orders.bill_country, b_orders.ship_country;
如果不需要查看它们,可以从SELECT语句中删除它们并省略分组;您不必选择列以将它们包含在WHERE子句中。如果要将bill\u country和ship\u country包含在一个查询中,该查询也具有聚合函数(如SUM),则需要对它们进行分组。我想您只需要在末尾添加这一行:
GROUP BY b_orders.bill_country, b_orders.ship_country;
如果不需要查看它们,可以从SELECT语句中删除它们并省略分组;您不必选择列以将它们包含在WHERE子句中。您想要总计、请购单或请购单国家/地区吗?联接生成的中间表将创建三行,每一行的合计订单和发货总额的值相同。因此,SUM()将对这些数量进行三次计数,但它将为您提供正确的总体积。这样把价格加起来对我来说没有意义。通常,您不希望在同一查询中对标题表(订单)和明细表(订单行)进行SUM()。啊,我知道这个价格就是我所说的扩展价格。这是一个我看不到的体积*单价栏。那我该怎么办呢?由于我无法重新设计数据库,有没有办法使这项工作正常进行。您不能执行两个单独的查询并将结果放在PHP脚本中吗?您想要总计还是pr.Order或pr.country?联接生成的中间表将创建三行,每行的total_Order和SHIFING_TOTALL值相同。因此,SUM()将对这些数量进行三次计数,但它将为您提供正确的总体积。这样把价格加起来对我来说没有意义。通常,您不希望在同一查询中对标题表(订单)和明细表(订单行)进行SUM()。啊,我知道这个价格就是我所说的扩展价格。这是一个我看不到的体积*单价栏。那我该怎么办呢?我不能重新设计数据库,你能不能执行两个单独的查询并将结果放在PHP脚本中?