sql - sql:选择由另一列分组的两列值的计数并获得两个计数的比率
问题描述
我有一个表格,其中包含按国家/地区标记的单个广告点击次数和广告展示次数。像这样的东西:
我需要的是找到每个国家的点击率(ad_click
计数除以ad_impression
每个国家的计数)。
我可以数数:
SELECT
`events_20200918`.`geo`.`country` AS `geo_country`,
`events_20200918`.`event_name` AS `event_name`,
count(1) AS `count_of_rows`
FROM `smartsecurity2-fccc6`.`analytics_238757844`.`events_20200918` AS `events_20200918`
WHERE
`events_20200918`.`event_name` IN ('S_ad_impression', 'S_ad_click')
GROUP BY
1, 2
ORDER BY
3 DESC
结果如下:
但是如何添加每个国家/地区的 ad_click/ad_impression 比率?
解决方案
如果您希望每个国家/地区有一行,使用点击次数与展示次数的比率,您可以使用条件聚合:
select
`geo`.`country` as `geo_country`,
safe_divide(
1.0 * countif(`event_name` = 's_ad_click'),
countif(`event_name` = 's_ad_impression')
) as ratio
from `smartsecurity2-fccc6`.`analytics_238757844`.`events_20200918` as `events_20200918`
where `event_name` in ('S_ad_impression', 'S_ad_click')
group by 1
这按国家/地区分组,然后将点击次数除以展示次数。safe_divide()
如果一个国家/地区有点击但没有展示,则避免除以 0 错误。
推荐阅读
- css - 圆圈中的文字有响应
- firebase - Firebase 托管重定向到 Function + Angular Web App
- spring-boot - Spring boot + Logback-logstash appender:找不到名为的appender
- vb.net - DataGridView 不显示文本文件中的值
- javascript - 如何扩展 AudioNode(没有构造函数的本机对象)
- node.js - 在返回 null-Mongo/Mongoose 的循环中使用 $pull
- jquery - 3秒后jQuery打开/关闭点击
- java - 转换后的 .exe 文件中文件的路径是什么?
- nginx - Nginx 作为 IIS 上的反向代理
- wordpress - Wordpress 主题安装问题