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