通过计算 TRUE/FALSE 个语句来计算点击率
Compute click-through rate by counting TRUE/FALSE statements
这与我之前的问题类似:
我认为在一个单独的问题中提出这个问题仍然有用,因为它使用了不同的逻辑。
我正在使用 SQLite。
我需要确定 3 个广告的点击率,每个广告代表一种产品;那将是订阅除以点击广告的人数。
列:
- person_id - 人的唯一标识符
- 日期 - 他们看到广告的日期
- ad_id - 广告内容:ad_1_product1、ad_2_product2 或 ad_3_product3
- 已点击 (TRUE/FALSE) - 点击了广告
- signed_up - (TRUE/FALSE) 创建了一个帐户
- 已订阅 (TRUE/FALSE) - 开始付费订阅
我设置点击,signed_up和订阅为BOOLEAN,其余为文本。
我的代码:
SELECT ad_id,
(SUM(CASE WHEN clicked = 'TRUE' THEN 1 ELSE 0 END) /
COUNT(person_id) --as total impressions? not sure about this--
) AS CTR
FROM videoadcampaign
GROUP BY ad_id;
结果我的点击率是 0。
非常感谢任何帮助。
SQLite 进行整数运算。您可以查看我对您上一个问题的回答。但你可以这样做:
SELECT ad_id,
(SUM(CASE WHEN clicked = 'TRUE' THEN 1.0 ELSE 0 END) /
COUNT(person_id) --as total impressions? not sure about this--
) AS CTR
FROM videoadcampaign
GROUP BY ad_id;
或者如果每个 personid
有一行并且 personid
不是 NULL
那么:
SELECT ad_id,
AVG(CASE WHEN clicked = 'TRUE' THEN 1.0 ELSE 0 END)
FROM videoadcampaign
GROUP BY ad_id;
SQLite 中没有 BOOLEAN
数据类型,您可以在此处看到:Datatypes In SQLite Version 3,但您可以定义具有该数据类型的列,并且可以在其中存储任何内容,甚至是字符串。
因此,如果您实际存储在定义为 BOOLEAN
字符串的列中,例如 'FALSE'
和 'TRUE'
,您应该将数据类型定义为 TEXT
或更好您应该在其中存储 0
或 1
之类的值,它们分别代表 'FALSE'
或 'TRUE'
并且对于查询性能更好。
如果您在 clicked
列中确实有字符串值,您可以通过以下方式获得所需的结果:
SELECT ad_id, AVG(clicked = 'TRUE') AS CTR
FROM videoadcampaign
GROUP BY ad_id;
布尔表达式 clicked = 'TRUE'
的计算结果为 0
或 1
和 AVG()
returns 所有 1
的总和除以总行数。
如果您在 clicked
列中有类似 0
或 1
的值(或它们的别名 false
和 true
作为标识符而不是字符串文字) 那就更简单了:
SELECT ad_id, AVG(clicked) AS CTR
FROM videoadcampaign
GROUP BY ad_id;
这与我之前的问题类似:
我认为在一个单独的问题中提出这个问题仍然有用,因为它使用了不同的逻辑。
我正在使用 SQLite。
我需要确定 3 个广告的点击率,每个广告代表一种产品;那将是订阅除以点击广告的人数。
列:
- person_id - 人的唯一标识符
- 日期 - 他们看到广告的日期
- ad_id - 广告内容:ad_1_product1、ad_2_product2 或 ad_3_product3
- 已点击 (TRUE/FALSE) - 点击了广告
- signed_up - (TRUE/FALSE) 创建了一个帐户
- 已订阅 (TRUE/FALSE) - 开始付费订阅
我设置点击,signed_up和订阅为BOOLEAN,其余为文本。
我的代码:
SELECT ad_id,
(SUM(CASE WHEN clicked = 'TRUE' THEN 1 ELSE 0 END) /
COUNT(person_id) --as total impressions? not sure about this--
) AS CTR
FROM videoadcampaign
GROUP BY ad_id;
结果我的点击率是 0。
非常感谢任何帮助。
SQLite 进行整数运算。您可以查看我对您上一个问题的回答。但你可以这样做:
SELECT ad_id,
(SUM(CASE WHEN clicked = 'TRUE' THEN 1.0 ELSE 0 END) /
COUNT(person_id) --as total impressions? not sure about this--
) AS CTR
FROM videoadcampaign
GROUP BY ad_id;
或者如果每个 personid
有一行并且 personid
不是 NULL
那么:
SELECT ad_id,
AVG(CASE WHEN clicked = 'TRUE' THEN 1.0 ELSE 0 END)
FROM videoadcampaign
GROUP BY ad_id;
SQLite 中没有 BOOLEAN
数据类型,您可以在此处看到:Datatypes In SQLite Version 3,但您可以定义具有该数据类型的列,并且可以在其中存储任何内容,甚至是字符串。
因此,如果您实际存储在定义为 BOOLEAN
字符串的列中,例如 'FALSE'
和 'TRUE'
,您应该将数据类型定义为 TEXT
或更好您应该在其中存储 0
或 1
之类的值,它们分别代表 'FALSE'
或 'TRUE'
并且对于查询性能更好。
如果您在 clicked
列中确实有字符串值,您可以通过以下方式获得所需的结果:
SELECT ad_id, AVG(clicked = 'TRUE') AS CTR
FROM videoadcampaign
GROUP BY ad_id;
布尔表达式 clicked = 'TRUE'
的计算结果为 0
或 1
和 AVG()
returns 所有 1
的总和除以总行数。
如果您在 clicked
列中有类似 0
或 1
的值(或它们的别名 false
和 true
作为标识符而不是字符串文字) 那就更简单了:
SELECT ad_id, AVG(clicked) AS CTR
FROM videoadcampaign
GROUP BY ad_id;