Saya mungkin salah tapi dari apa yang saya mengerti
- conversions.id adalah kunci utama dari konversi tabel Anda
- stats.id adalah kunci utama dari statistik tabel Anda
Jadi untuk setiap conversions.id Anda memiliki paling banyak satu links.id yang terpengaruh.
Permintaan Anda seperti melakukan produk kartesius dari 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
dan untuk setiap tautan, Anda mendapatkan baris sizeof([clicks]) x sizeof([conversions])
Seperti yang Anda catat, jumlah konversi unik dalam permintaan Anda dapat diperoleh melalui
count(distinct conversions.id) = sizeof([conversions])
perbedaan ini berhasil menghapus semua baris [klik] dalam produk kartesius
tapi jelas
sum(conversions.value) = sum([conversions].value) * sizeof([clicks])
Dalam kasus Anda, sejak
count(*) = sizeof([clicks]) x sizeof([conversions])
count(*) = sizeof([clicks]) x count(distinct conversions.id)
kamu punya
sizeof([clicks]) = count(*)/count(distinct conversions.id)
jadi saya akan menguji permintaan Anda dengan
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;
Terus kabari saya !Jerome