4
我有這個mysql查詢的問題。基本上我需要加入一個表(CostiFissi,具有成本表)與支付(Pagamenti)的表,按成本ID(CostiFissi_IdCostoFisso)將它們分組,計算的支付金額每月總和的平均值(不只是AVG (Totale))。mySQL SUM和COUNT問題,連接上的某些值得到加倍
即:9月和3000十月1000+到2000年間的平均水平應該回到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問題的加盟,不知道啊,過了好一會兒,我得到了這一點,但現在它的有點亂,我無法得到進一步的> _ <
TY!
您先加入然後分組。最好先組合,然後加入。它會快得多,作爲額外的獎勵,你也會得到正確的結果。 –
DISTINCT,那是該死的魔法詞! :D 順便說一句,@MarkByers建議聽起來不錯ty :) –