Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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
Mysql 迭代一个表中的记录并通过计算将它们添加到另一个表中_Mysql - Fatal编程技术网

Mysql 迭代一个表中的记录并通过计算将它们添加到另一个表中

Mysql 迭代一个表中的记录并通过计算将它们添加到另一个表中,mysql,Mysql,我目前正在使用PHP和MySQL在一个表中检索一组100000条记录,然后迭代每个记录进行一些计算,然后将结果插入另一个表中。我想知道我是否能够在纯SQL中实现这一点,并使查询运行得更快 以下是我目前使用的: $stmt= $pdo->query(" SELECT Well_Permit_Num , Gas_Quantity , Gas_Production_Days FROM DEP_OG_Production_Import ORDER BY id A

我目前正在使用PHP和MySQL在一个表中检索一组100000条记录,然后迭代每个记录进行一些计算,然后将结果插入另一个表中。我想知道我是否能够在纯SQL中实现这一点,并使查询运行得更快

以下是我目前使用的:

$stmt= $pdo->query("
SELECT Well_Permit_Num
     , Gas_Quantity
     , Gas_Production_Days
  FROM DEP_OG_Production_Import
 ORDER 
    BY id ASC
");

foreach ($stmt as $row) {
     $data = array('well_id' => $row['Well_Permit_Num'],
                   'gas_quantity' => $row['Gas_Quantity'],
                   'gas_days' => $row['Gas_Production_Days'],
                   'gas_average' => ($row['Gas_Production_Days']);


    $updateTot = $pdo->prepare("INSERT INTO DEP_OG_TOTALS 
                                      (Well_Permit_Num,
                                      Total_Gas,
                                      Total_Gas_Days,
                                      Total_Gas_Avg)
                                VALUES (:well_id,
                                        :gas_quantity,
                                        :gas_days,
                                        :gas_average)
                                ON DUPLICATE KEY UPDATE
                                   Total_Gas = Total_Gas + VALUES(Total_Gas),
                                   Total_Gas_Days = Total_Gas_Days + VALUES(Total_Gas_Days),
                                   Total_Gas_Avg =(Total_Gas + VALUES(Total_Gas)) / (Total_Gas_Days + VALUES(Total_Gas_Days))");



}
我想看看这是否可以在纯MySQL中实现,而不是仅仅因为使用PHP来保存变量而不得不使用PHP

我的结果应该是每口井的1条记录,这是一个运行总数。源表可能包含同一口井的60-70条记录,但有数千个不同的井


这是一个必须运行的常量导入过程,所以它不像是有一个最终的表,您可以只做SUM(Gas\u Quantity)…等等。在

上,正如Uuerdo所评论的那样,您似乎需要一个。这种查询的作用是插入由内部
选择返回的结果集。内部选择是一个聚合查询,用于计算每个井的总气体和天数

INSERT INTO DEP_OG_TOTALS (Well_Permit_Num, Total_Gas, Total_Gas_Days, Total_Gas_Avg)
SELECT
    t.Well_Permit_Num, 
    SUM(t.Gas_Quantity) Total_Gas,
    SUM(t.Gas_Production_Days) Total_Gas_Days
FROM DEP_OG_Production_Import t
GROUP BY t.Well_Permit_Num
ON DUPLICATE KEY UPDATE
    Total_Gas = Total_Gas + t.Total_Gas,
    Total_Gas_Days = Total_Gas_Days + t.Total_Gas_Days,
    Total_Gas_Avg =(Total_Gas + t.Total_Gas) / (Total_Gas_Days + t.Total_Gas_Days)

您应该能够使用INSERT….SELECT,这似乎是一个很好的示例。但是,如果我将t.Total_Gas的值(Total_Gas)更改为有效值,则会得到字段列表中未知列t.Total_Gas的错误