Mysql 对不同行的字段求和

Mysql 对不同行的字段求和,mysql,Mysql,我在使用mySQL查询时遇到问题 我们有一个跟踪用户点击次数的表。它是一个整数字段,每次单击增加1 模式: +------------+--------------+------+-----+ | Field | Type | Null | Key | +------------+--------------+------+-----+ | id | int(11) | NO | PRI | | arrival_id | int(11)

我在使用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
如果我想确定至少生成一次单击的到达百分比,我可以编写以下查询。(注意-并非每个到达都有单击退出,因此为左连接):

在同一查询过程中,我也将JOIN arrivals保留到另一个表(而不是click_tracker)时出现了这个问题

我还有一个叫做广告的表格,它跟踪用户将看到的各种类型的广告。广告与到达绑定,到达时可以有多个广告。模式如下:

+------------+--------------+------+-----+
| Field      | Type         | Null | Key | 
+------------+--------------+------+-----+
| id         | int(11)      | NO   | PRI | 
| arrival_id | int(11)      | NO   |     |
| ad_type    | varchar(255) | NO   |     | 
+------------+--------------+------+-----+
现在,我想找到带有ad_type=“ZXY”的到达百分比,以及至少生成一次单击的到达百分比(无论ad_类型如何)。执行以下操作无效:

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
广告表的左连接创建一个结果集,该结果集与到达id重复。因此,当我随后将JOIN留在click\u tracker表时,我也会得到重复的click\u tracker id


我需要一种只对不同的click\u tracker行进行求和的方法(click\u tracker.clickouts>0)。我尝试了SUM(DISTINCT click_tracker.clickout>0),但没有给出正确的结果。

我不想这么说,但这两个计算是完全独立的,我认为您需要为它们执行两个查询。以下是它们(以及我使用的数据):

按广告类型划分的到达百分比

SELECT
  ad_type,
  (COUNT(arrival_id) / x.total) as ad_pct
  FROM advertisements, 
       (SELECT COUNT(id) AS total FROM arrivals) x
  GROUP BY ad_type;
(或者您可以将单个广告类型的
GROUP BY
更改为
WHERE
子句。)

至少单击一次即可到达的百分比:

SELECT
  (COUNT(id) / x.total) AS click_pct
  FROM click_tracker,
       (SELECT COUNT(id) AS total FROM arrivals) x
  WHERE click_tracker.clickouts > 0;

很难理解你的问题。你能把另一张表的样本也贴出来吗?为了清晰起见,编辑了一下。希望这会有帮助。我希望情况不是这样。谢谢如果您只需要一个DB调用,那么您可以将这两个查询组合成一个多嵌套的
SELECT
,但它们是不同的查询。祝你好运
SELECT
  (COUNT(id) / x.total) AS click_pct
  FROM click_tracker,
       (SELECT COUNT(id) AS total FROM arrivals) x
  WHERE click_tracker.clickouts > 0;