我遇到了这个mysql查询的问题。基本上我需要加入一个表( CostiFissi ,一个有成本的表)和一个带付款的表( Pagamenti ),按成本ID(CostiFissi_IdCostoFisso)对它们进行分组并计算平均值每月付款金额之间(不仅仅是AVG(Totale))。
即:9月1000 + 2000和10月3000之间的平均值应该返回2250而不是3000
这是我到目前为止所做的:
SELECT `cf`.`IdCostoFisso`,
`cf`.`Nome`,
`cf`.`Frequenza`,
`cf`.`Importo`,
`cf`.`DateFrom`,
`cf`.`DateTo`,
SUM( p.Totale ) PagamentiTotale,
COUNT( p.IdPagamento ) PagamentiNum,
AVG(p2.somma_mese) Media
FROM (`CostiFissi` cf)
LEFT JOIN `Pagamenti` p ON `p`.`CostiFissi_IdCostoFisso` = `cf`.`IdCostoFisso`
LEFT JOIN (
SELECT MONTH(Data),
YEAR(Data),
CostiFissi_IdCostoFisso,
SUM(Totale) somma_mese
FROM Pagamenti
GROUP BY YEAR(Data),
MONTH(Data),
CostiFissi_IdCostoFisso
) AS p2 ON `p2`.`CostiFissi_IdCostoFisso` = `cf`.`IdCostoFisso`
WHERE `cf`.`DateTo` > '2012-09-27 09:46:14'
AND `p`.`Data` >= '2012-01-01 00:00:01'
AND `p`.`Data` <= '2012-12-31 23:59:59'
GROUP BY `cf`.`IdCostoFisso`
当我运行查询时,我得到了这个问题:说我有2个成本,cost_a(w / 3付款)和cost_b(w / 1付款),我找回两个正确的意思(因为我希望它计算)但COUNT(p.IdPagamento)为cost_a返回6(而不是3),为cost_b返回1。对于SUM(p.Totale)来说,它的成本是cost_a的两倍而不是cost_b。
也许是桌子加入的问题,dunno ......我花了一段时间才达到这一点但是现在它有点乱,我无法进一步&gt; _&lt;
TY!