Možná se mýlím, ale z toho, co jsem pochopil
- conversions.id je primární klíč z vaší tabulky konverzí
- stats.id je primární klíč statistik vaší tabulky
Pro každý conversions.id máte tedy ovlivněný maximálně jeden links.id.
Váš požadavek je trochu jako dělat kartézský součin 2 sad:
[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
a pro každý odkaz získáte sizeof([kliknutí]) x sizeof([konverze]) řádků
Jak jste si všimli, počet jedinečných konverzí ve vaší žádosti lze získat prostřednictvím
count(distinct conversions.id) = sizeof([conversions])
tento rozdíl dokáže odstranit všechny čáry [kliknutí] v kartézském součinu
ale jasně
sum(conversions.value) = sum([conversions].value) * sizeof([clicks])
Ve vašem případě od
count(*) = sizeof([clicks]) x sizeof([conversions])
count(*) = sizeof([clicks]) x count(distinct conversions.id)
máte
sizeof([clicks]) = count(*)/count(distinct conversions.id)
takže bych váš požadavek otestoval pomocí
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;
Informujte mě, Jerome