मैं गलत हो सकता हूं लेकिन जो मैं समझता हूं उससे
- रूपांतरण आईडी प्राथमिक कुंजी है आपकी तालिका के रूपांतरण
- stats.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([clicks]) 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;
मुझे तैनात रखें !जेरोम