私は間違っているかもしれませんが、私が理解していることから
- Conversions.id 主キーです テーブルのコンバージョン
- stats.id 主キーです テーブルの統計
したがって、conversions.idごとに、最大で1つの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([clicks])x sizeof([conversions])行を取得します
ご指摘のとおり、リクエスト内の一意のコンバージョン数は、
を介して取得できます。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;
投稿してください!ジェローム