mySQL SUM和COUNT问题,join上的一些值加倍

时间:2012-09-27 08:03:49

标签: mysql sql join count sum

我遇到了这个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!

1 个答案:

答案 0 :(得分:1)

像这样使用COUNT(DISTINCT)

COUNT(DISTINCT p.IdPagamento)

而不是COUNT(p.IdPagamento)