mySQLクエリに問題があります。
ユーザーがクリックした回数を追跡するテーブルがあります。これは、クリックごとに1ずつ増加する単一の整数フィールドです。
スキーマ:
+------------+--------------+------+-----+
| Field | Type | Null | Key |
+------------+--------------+------+-----+
| id | int(11) | NO | PRI |
| arrival_id | int(11) | NO | |
| clickouts | int(11) | NO | |
+------------+--------------+------+-----+
データ例:
id arrival_id clickouts
5 22 0
6 23 1
7 24 7
少なくとも1回のクリックを生成した到着の割合を確認したい場合は、次のクエリを記述できます。(注-すべての到着にクリックアウトがあるわけではないため、左に参加します):
SELECT SUM(click_tracker.clickouts > 0)/COUNT(DISTINCT arrivals.id)
FROM arrivals
LEFT JOIN click_tracker ON arrivals.id = click_tracker.arrival_id;
この問題は、同じクエリ中に別のテーブル(click_trackerではない)にJOINが到着したときにも発生します。
広告と呼ばれる別のテーブルがあり、ユーザーに表示されるさまざまなタイプの広告を追跡します。広告は到着に関連付けられており、到着には多くの広告を含めることができます。スキーマは次のとおりです。
+------------+--------------+------+-----+
| Field | Type | Null | Key |
+------------+--------------+------+-----+
| id | int(11) | NO | PRI |
| arrival_id | int(11) | NO | |
| ad_type | varchar(255) | NO | |
+------------+--------------+------+-----+
ここで、ad_type = "ZXY"の到着の割合と、(ad_typeに関係なく)少なくとも1回のクリックを生成した到着の割合を調べたいと思います。次の手順を実行しても機能しません。
SELECT COUNT(DISTINCT advertisements.id)/COUNT(DISTINCT arrivals.id) AS ad_pct,
SUM(click_tracker.clickouts > 0)/COUNT(DISTINCT arrivals.id) AS click_pct
FROM arrivals
LEFT JOIN advertisements ON arrivals.id = advertisements.arrival_id
LEFT JOIN click_tracker ON arrivals.id = click_tracker.arrival_id
アドバタイズテーブルのLEFTJOINは、結果セットの重複する到着IDを作成します。したがって、後でclick_trackerテーブルにJOINを左に移動すると、click_trackerIDも重複して取得されます。
個別のclick_tracker行に対してのみSUM(click_tracker.clickouts> 0)を実行する方法が必要です。SUM(DISTINCT click_tracker.clickouts> 0)を試しましたが、正しい結果が得られませんでした。