我在使用 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
如果我想确定产生至少一次点击的到达百分比,我可以编写以下查询。(注意 - 不是每个到达都有点击,因此左加入):
SELECT SUM(click_tracker.clickouts > 0)/COUNT(DISTINCT arrivals.id)
FROM arrivals
LEFT JOIN click_tracker ON arrivals.id = click_tracker.arrival_id;
当我在同一查询期间还 LEFT JOIN 到达另一个表(不是 click_tracker)时,问题就出现了。
我有另一个名为 ads 的表,它跟踪用户将看到的各种类型的广告。广告与到达相关联,到达可以有许多广告。架构如下:
+------------+--------------+------+-----+
| Field | Type | Null | Key |
+------------+--------------+------+-----+
| id | int(11) | NO | PRI |
| arrival_id | int(11) | NO | |
| ad_type | varchar(255) | NO | |
+------------+--------------+------+-----+
现在,我想找到 ad_type = "ZXY" 的到达百分比以及产生至少一次点击的到达百分比(无论 ad_type 是什么)。执行以下操作将不起作用:
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
广告表的 LEFT JOIN 创建一个结果集重复到达 id。因此,当我随后 LEFT JOIN 到 click_tracker 表时,我也会得到重复的 click_tracker id。
我需要一种方法来对不同的 click_tracker 行进行 SUM(click_tracker.clickouts > 0) 。我尝试了 SUM(DISTINCT click_tracker.clickouts > 0) 但这并没有给我正确的结果。