Jeg kan tage fejl, men efter hvad jeg forstår
- conversions.id er den primære nøgle af dine tabel konverteringer
- stats.id er den primære nøgle af din tabel statistik
For hvert konverterings.id har du således højst ét berørt links.id.
Din anmodning er lidt som at lave det kartesiske produkt af 2 sæt :
[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
og for hvert link får du sizeof([klik]) x sizeof([konverteringer]) linjer
Som du har bemærket, kan antallet af unikke konverteringer i din anmodning opnås via en
count(distinct conversions.id) = sizeof([conversions])
denne distinkte formår at fjerne alle [klik]-linjerne i det kartesiske produkt
men klart
sum(conversions.value) = sum([conversions].value) * sizeof([clicks])
I dit tilfælde, siden
count(*) = sizeof([clicks]) x sizeof([conversions])
count(*) = sizeof([clicks]) x count(distinct conversions.id)
du har
sizeof([clicks]) = count(*)/count(distinct conversions.id)
så jeg ville teste din anmodning 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;
Hold mig orienteret !Jerome