Problems / Conversion Rate by Channel / Editorial
COALESCE(signups, 0)
* 100.0
The classic blunder here is the join-then-count fan-out: visits JOIN signups USING (channel) produces visits × signups rows per channel, so both counts come out inflated (and COUNT(DISTINCT ...) only partially rescues it). Whenever two event tables share only a dimension, the safe pattern is aggregate-each-side-then-join — the join then runs on one row per key and nothing can multiply.
visits JOIN signups USING (channel)
visits × signups
COUNT(DISTINCT ...)
Solve Conversion Rate by Channel yourself →