2016-09-18 44 views
0

我从一个podetail表中查询以下查询,我一次计算“one”唯一项目的平均价格。我需要创建一个“avgUnitCost”列表。是否有一种方法可以在子查询中使用此现有查询来生成avgUnitCost列表?mysql;遍历一个表并计算avgerage价格

SELECT items.`itemName`, 
     SUM(podetails.`qtyReceived`) AS qtyRcvd, 
     SUM(podetails.`qtyReceived` * podetails.`unitCost`) AS totalUnitCost, 
     SUM(podetails.`qtyReceived` * podetails.`unitCost`)/SUM(podetails.`qtyReceived`) AS avgUnitCost 

FROM podetails, items, purchaseorders 
WHERE purchaseorders.`poID` = podetails.`poID` 
    AND podetails.`itemID` = items.`itemID` 
    AND podetails.`itemID` = 3;> 

回答

0

您在这里缺少一个GROUP BY声明。不知道在哪个列完全相同但假设你应该items.itemName

SELECT items.`itemName`, 
    SUM(podetails.`qtyReceived`) AS qtyRcvd, 

    SUM(podetails.`qtyReceived` * podetails.`unitCost`) AS totalUnitCost, 

    SUM(podetails.`qtyReceived` * podetails.`unitCost`)/SUM(podetails.`qtyReceived`) AS avgUnitCost 

FROM podetails JOIN purchaseorders 

ON 
    purchaseorders.`poID` = podetails.`poID` 
JOIN items 

ON 
    podetails.`itemID` = items.`itemID` 

WHERE 
    podetails.`itemID` = 3 

GROUP BY items.`itemName`; 
0

如果你想在avgUnitCost的项目,所有存在于purchaseorders表,下面的查询组可以帮助你

SELECT items.`itemName`, 
     SUM(podetails.`qtyReceived`) AS qtyRcvd, 
     SUM(podetails.`qtyReceived` * podetails.`unitCost`) AS totalUnitCost, 
     SUM(podetails.`qtyReceived` * podetails.`unitCost`)/SUM(podetails.`qtyReceived`) AS avgUnitCost 

FROM podetails, items, purchaseorders 
WHERE purchaseorders.`poID` = podetails.`poID` 
    AND podetails.`itemID` = items.`itemID` 
    GROUP BY items.`itemID`; 

使用GROUP BY这个小的变化可能会给你预期的结果

+0

这样做......太棒了..丛林存在!谢谢 –