繁体   English   中英

sql:select 两列值的计数由另一列分组并获得两列计数的比率

[英]sql: select counts of two column values grouped by another column and get ratio of two counts

我有一张表格,其中包含按国家/地区标记的个别广告点击次数和广告展示次数。 像这样:

在此处输入图像描述

我需要的是找到每个国家/地区的点击率( 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 的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM