Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于对不同表中的多个列求和的MYSQL查询_Php_Mysql_Join_Where Clause - Fatal编程技术网

Php 用于对不同表中的多个列求和的MYSQL查询

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 |

我有两个具有一对多关系的表(订单、订单行)。orders表将有一行,order_lines表将有一行用于订单所附的每个产品

命令

   +----------+-------------+---------------+
   |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脚本中?