美文网首页
Leetcode1322. 广告效果(简单)

Leetcode1322. 广告效果(简单)

作者: kaka22 | 来源:发表于2020-07-22 09:31 被阅读0次

    题目
    表: Ads

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | ad_id         | int     |
    | user_id       | int     |
    | action        | enum    |
    +---------------+---------+
    

    (ad_id, user_id) 是该表的主键
    该表的每一行包含一条广告的 ID(ad_id),用户的 ID(user_id) 和用户对广告采取的行为 (action)
    action 列是一个枚举类型 ('Clicked', 'Viewed', 'Ignored') 。

    一家公司正在运营这些广告并想计算每条广告的效果。

    广告效果用点击通过率(Click-Through Rate:CTR)来衡量,公式如下:



    写一条SQL语句来查询每一条广告的 ctr ,

    ctr 要保留两位小数。结果需要按 ctr 降序、按 ad_id 升序 进行排序。

    查询结果示例如下:

    Ads 表:

    +-------+---------+---------+
    | ad_id | user_id | action  |
    +-------+---------+---------+
    | 1     | 1       | Clicked |
    | 2     | 2       | Clicked |
    | 3     | 3       | Viewed  |
    | 5     | 5       | Ignored |
    | 1     | 7       | Ignored |
    | 2     | 7       | Viewed  |
    | 3     | 5       | Clicked |
    | 1     | 4       | Viewed  |
    | 2     | 11      | Viewed  |
    | 1     | 2       | Clicked |
    +-------+---------+---------+
    

    结果表:

    +-------+-------+
    | ad_id | ctr   |
    +-------+-------+
    | 1     | 66.67 |
    | 3     | 50.00 |
    | 2     | 33.33 |
    | 5     | 0.00  |
    +-------+-------+
    

    对于 ad_id = 1, ctr = (2/(2+1)) * 100 = 66.67
    对于 ad_id = 2, ctr = (1/(1+2)) * 100 = 33.33
    对于 ad_id = 3, ctr = (1/(1+1)) * 100 = 50.00
    对于 ad_id = 5, ctr = 0.00, 注意 ad_id = 5 没有被点击 (Clicked) 或查看 (Viewed) 过
    注意我们不关心 action 为 Ingnored 的广告
    结果按 ctr(降序),ad_id(升序)排序

    解答
    其实就是对每个ad_id进行分组 统计Clicked的数量 除以Clicked和views的总数量

    select A.ad_id, round(sum(A.action = 'Clicked')/(sum(A.action = 'Clicked') + sum(A.action = 'Viewed')) *100, 2) as ctr
    from Ads as A
    group by A.ad_id
    

    但是要注意 如果Clicked的数量 除以Clicked和views的总数量为0 得到的将是NULL而不是0 可以用IF 也可以用IFNULL

    select A.ad_id, round(ifnull(sum(A.action = 'Clicked')/(sum(A.action = 'Clicked') + sum(A.action = 'Viewed')), 0) *100, 2) as ctr
    from Ads as A
    group by A.ad_id
    

    相关文章

      网友评论

          本文标题:Leetcode1322. 广告效果(简单)

          本文链接:https://www.haomeiwen.com/subject/ipigkktx.html