このmysqlクエリに問題があります。基本的に、1つのテーブル(CostiFissi、コストのあるテーブル)を支払いのあるテーブル(Pagamenti)と結合し、それらをコストID( CostiFissi_IdCostoFisso)でグループ化し、毎月の支払い額の合計(AVG(Totale)だけでなく)の平均を計算する必要があります。 。
つまり、9月の1000+2000と10月の3000の間の平均は3000ではなく2250を返すはずです
これは私がこれまでにしたことです:
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`
クエリを実行したときよりも、この問題が発生します。たとえば、cost_a(w / 3支払い)とcost_b(w / 1支払い)の2つのコストがあるとすると、両方の正しい平均が返されます(計算したいので)ただし、COUNT(p.IdPagamento)は、cost_aの場合は6(3ではなく)を返し、cost_bの場合は1を返します。SUM(p.Totale)についても同じですが、cost_bではなくcost_aで2倍になります。
テーブルpの結合の問題かもしれませんが、わかりません…このポイントに到達するまでにしばらく時間がかかりましたが、今は少し面倒で、それ以上進むことができません> _ <
ty!