Може и да греша, но доколкото разбирам
- conversions.id е първичният ключ от Вашите таблици преобразувания
- stats.id е първичният ключ от вашата таблица статистика
По този начин за всеки conversions.id имате най-много един links.id засегнат.
Искането ви е като да направите декартовия продукт от 2 комплекта :
[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
и за всяка връзка получавате sizeof([кликове]) x sizeof([конверсии]) редове
Както отбелязахте, броят на уникалните реализации във вашата заявка може да бъде получен чрез
count(distinct conversions.id) = sizeof([conversions])
този различен успява да премахне всички [кликове] линии в декартовия продукт
но ясно
sum(conversions.value) = sum([conversions].value) * sizeof([clicks])
Във вашия случай, тъй като
count(*) = sizeof([clicks]) x sizeof([conversions])
count(*) = sizeof([clicks]) x count(distinct conversions.id)
имате
sizeof([clicks]) = count(*)/count(distinct conversions.id)
така че бих тествал вашата заявка с
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;
Дръж ме в течение !Jerome