我对这个 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 翻倍。
可能是表 p 加入的问题,不知道……我花了一段时间才达到这一点,但现在有点乱,我无法更进一步>_<
泰!