2012-09-27 4 views
4

이 mysql 쿼리에 문제가 있습니다. 기본적으로 지불 테이블 (CostiFissi, 비용이있는 테이블)을 지불 테이블 (Pagamenti)과 연결하고, 비용 ID (CostiFissi_IdCostoFisso)로 그룹화하고 월별 총 지불 금액 (AVG (Totale)).mySQL SUM 및 COUNT 문제, 일부 값이 두 배로 증가합니다.

즉, 10 월에 9 월과 3000 + 2000 1000 사이의 평균이 아닌

이 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` 

나는이 문제를 겪는다 : 나는 2 개의 비용, cost_a (3 번 지불) 및 cost_b (1/지불)가 있다고 말하고, 둘 다 (내가 계산되기를 원함)하지만 COUNT (p.IdPagamento)는 cost_a에 대해 6을 반환하고 (3이 아님) cost_b에 대해 1을 반환합니다. SUM (p.Totale)과 동일하지만 cost_a는 2 배가되고 cost_b는 그렇지 않습니다.

어쩌면 표 P에 문제가 합류 날이 지점에 도착하는 나도 몰라 ...이 걸 렸어요하지만 지금은 조금 지저분한 그리고 나는> _ 더 <

타이를 얻을 수 있습니다!

+1

먼저 그룹에 가입했습니다. 먼저 그룹화 한 다음 가입하십시오. 훨씬 더 빠를 것이며 추가 보너스로 올바른 결과를 얻을 수 있습니다. –

+0

DISTINCT, 저것은 마술 낱말 저주이었다! : D btw, @MarkByers 조언이 너무 좋아요. :) –

답변

1

사용 COUNT(DISTINCT)과 같이 :

COUNT(DISTINCT p.IdPagamento) 

대신 COUNT(p.IdPagamento).