4

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

泰!

4

1 回答 1

1

COUNT(DISTINCT)像这样使用:

COUNT(DISTINCT p.IdPagamento)

而不是COUNT(p.IdPagamento).

于 2012-09-27T08:13:22.670 回答