繁体   English   中英

MySQL:使用来自另一个表的计算更新所有记录

[英]MySQL: Updating all records using calculations from another table

我需要使用两列(mixedPoints和productQuantity)的总和进行计算,其中行属于一个表(tblSubmissionProducts)上的客户,然后将该值存储在客户表(tblCustomer)上的客户记录中。

  1. 需要为每个客户更新此记录(10000条记录)。
  2. 每个客户在tblSubmissionProducts中可能有0行或更多行。
  3. 仅计算MixedPoints值> 0的位置。

我为一个客户创建了一个查询,但似乎不适用于整个表

SET @custID = '9';
SELECT customerID, 

(SELECT ROUND(SUM(mixedPointsTotal) / SUM(productQuantity), 2) AS 'Avg Mixed Points' 
FROM tblSubmissionProducts 
WHERE tblSubmissionProducts.customerID = @custID),

(SELECT ROUND(SUM(mixedPointsTotal) / SUM(productQuantity), 2) AS '3mth Mixed Points' 
FROM tblSubmissionProducts 
WHERE tblSubmissionProducts.customerID = @custID
AND submissionProductDate BETWEEN DATE_SUB(NOW(), INTERVAL 3 MONTH) AND NOW()),

(SELECT ROUND(SUM(mixedPointsTotal) / SUM(productQuantity), 2) AS '6mth Mixed Points' 
FROM tblSubmissionProducts 
WHERE tblSubmissionProducts.customerID = @custID
AND submissionProductDate BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW())

;

这是查询完整列表的第一部分:似乎只是将表锁定了太长时间,并且只更新了一部分记录。 我最终不得不取消查询。

任何帮助,将不胜感激。

UPDATE tblCustomer, tblSubmissionProducts
SET  tblCustomer.mixedPoints = 
(SELECT ROUND(SUM(tblSubmissionProducts.mixedPointsTotal) / SUM(tblSubmissionProducts.productQuantity), 2) 
FROM tblSubmissionProducts WHERE tblSubmissionProducts.customerID = tblCustomer.CustomerID
AND tblSubmissionProducts.mixedPoints > 0);

提前谢谢了。

使用MySQL update-join构造像

UPDATE tblCustomer
JOIN (SELECT customerID,
ROUND(SUM(tblSubmissionProducts.mixedPointsTotal) / SUM(tblSubmissionProducts.productQuantity), 2) as colx
FROM tblSubmissionProducts 
JOIN tblCustomer ON tblSubmissionProducts.customerID = tblCustomer.CustomerID
WHERE tblSubmissionProducts.mixedPoints > 0 ) xxx

ON xxx.customerID = tblCustomer.CustomerID
SET  tblCustomer.mixedPoints = xxx.colx;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM