Mysql 迭代一个表中的记录并通过计算将它们添加到另一个表中
我目前正在使用PHP和MySQL在一个表中检索一组100000条记录,然后迭代每个记录进行一些计算,然后将结果插入另一个表中。我想知道我是否能够在纯SQL中实现这一点,并使查询运行得更快 以下是我目前使用的: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
$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的错误