通过计算 TRUE/FALSE 个语句来计算点击率

Compute click-through rate by counting TRUE/FALSE statements

这与我之前的问题类似:

我认为在一个单独的问题中提出这个问题仍然有用,因为它使用了不同的逻辑。

我正在使用 SQLite。

我需要确定 3 个广告的点击率,每个广告代表一种产品;那将是订阅除以点击广告的人数。

列:

我设置点击,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 或更好您应该在其中存储 01 之类的值,它们分别代表 'FALSE''TRUE' 并且对于查询性能更好。

如果您在 clicked 列中确实有字符串值,您可以通过以下方式获得所需的结果:

SELECT ad_id, AVG(clicked = 'TRUE') AS CTR
FROM  videoadcampaign
GROUP BY ad_id;

布尔表达式 clicked = 'TRUE' 的计算结果为 01AVG() returns 所有 1 的总和除以总行数。

如果您在 clicked 列中有类似 01 的值(或它们的别名 falsetrue 作为标识符而不是字符串文字) 那就更简单了:

SELECT ad_id, AVG(clicked) AS CTR
FROM  videoadcampaign
GROUP BY ad_id;