我有下表名为
表格:事件
userid appid type
1 a imp
2 a imp
2 a click
3 a imp
4 a imp
4 a click
5 b imp
5 b click
我正在尝试计算每个appid
的点击率。在本例中,我们将点击率定义为(点击次数)/(展示次数)。我编写了以下 SQL:
SELECT appid, type, count(*) from activity group by appid, type
并得到以下结果:
输出:
appid type count(*)
a click 2
a imp 4
b click 1
b imp 1
下一步是按行除法。最终,我希望实现以下目标:
目标:
appid click-through
a .5 # 2/4 = .5
b 1 # 1/1 = 1
这是如何实现的?理想情况下,我希望在一个查询中完成此操作,这可能吗?
最佳答案
您可以使用条件聚合来执行此操作:
select appid
, SUM(CASE WHEN type = 'click' THEN 1 END)*1.0
/ SUM(CASE WHEN type = 'imp' THEN 1 END) AS click_through
from activity
group by appid
演示:SQL Fiddle
如果使用 MySQL,您可以进一步简化:
select appid
, SUM(type = 'click')*1.0
/ SUM(type = 'imp') AS click_through
from activity
group by appid
关于SQL 将数据按行划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28703538/