Jag kan ha fel men vad jag förstår
- conversions.id är den primära nyckeln av dina tabell omvandlingar
- stats.id är den primära nyckeln av din tabells statistik
För varje konverterings.id har du alltså högst ett länk.id som påverkas.
Din begäran är lite som att göra den kartesiska produkten med 2 set :
[clicks]
SELECT *
FROM links
LEFT OUTER JOIN stats ON links.id = stats.parent_id
[conversions]
SELECT *
FROM links
LEFT OUTER JOIN conversions ON links.id = conversions.link_id
och för varje länk får du sizeof([klick]) x sizeof([conversions]) rader
Som du noterade kan antalet unika omvandlingar i din begäran erhållas via en
count(distinct conversions.id) = sizeof([conversions])
denna distinkta lyckas ta bort alla [klick]-linjer i den kartesiska produkten
men klart
sum(conversions.value) = sum([conversions].value) * sizeof([clicks])
I ditt fall, sedan
count(*) = sizeof([clicks]) x sizeof([conversions])
count(*) = sizeof([clicks]) x count(distinct conversions.id)
du har
sizeof([clicks]) = count(*)/count(distinct conversions.id)
så jag skulle testa din begäran med
SELECT links.id,
count(DISTINCT stats.id) as clicks,
count(DISTINCT conversions.id) as conversions,
sum(conversions.value)*count(DISTINCT conversions.id)/count(*) as conversion_value
FROM links
LEFT OUTER JOIN stats ON links.id = stats.parent_id
LEFT OUTER JOIN conversions ON links.id = conversions.link_id
GROUP BY links.id
ORDER BY links.created desc;
Håll mig uppdaterad !Jerome