我对这个mysql查询有问题。基本上,我需要将一个表(CostiFissi,一个包含成本的表)与一个包含付款的表(Pagamenti)连接起来,按成本id(CostiFissi_IdCostoFisso)对其进行分组,并计算每月付款金额的平均值(而不仅仅是AVG(Total))。
即: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`
当我运行查询时,我遇到了这个问题:假设我有两个成本,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表加入的问题,dunno…我花了一段时间才达到这一点,但现在有点混乱,我无法进一步了解>_<
ty!
像这样使用COUNT(DISTINCT)
:
COUNT(DISTINCT p.IdPagamento)
而不是CCD_ 2。