【问题标题】:How to calculate below output in the SQL in AWS athena如何在 AWS athena 的 SQL 中计算以下输出
【发布时间】:2022-12-01 00:41:33
【问题描述】:

我有以下结果集。

with dataset AS (
    select 1 as total_users, ARRAY['google', 'meta', 'attentive', 'meta'] as path_list
    UNION ALL
    select 1, ARRAY['google', 'attentive', 'Direct Traffic', 'Direct Traffic', 'Direct Traffic', 'meta']
    UNION ALL
    select 4 , ARRAY ['google','meta', 'google']
    UNION ALL
    select 1, ARRAY['google', 'meta', 'meta', 'Direct Traffic' , 'meta']
    UNION ALL
    select 1, ARRAY['google', 'meta', 'meta']
    UNION ALL
    select 1, ARRAY['google', 'Direct Traffic', 'Direct Traffic','attentiva', 'attentiva', 'attentiva', 'Direct Traffic', 'meta']
)

SELECT path_list, total_users, path_list[2] as second_click, 
CASE WHEN CARDINALITY(path_list) > 2 THEN path_list[3] ELSE NULL END as third_click from dataset

total_users 列指示遍历特定路径的用户数。

我想计算以下输出。

第二次点击媒体 second_click_percentage 第三次点击 third_click_percentage

对于每种介质。

结果集如下所示

path_list total_users second_click third_click

[谷歌,直接流量,直接流量,attentiva,attentiva,attentiva,直接流量,元] 1 直接流量 直接流量

[谷歌,元,细心,元] 1元细心

[google, attentive, Direct Traffic, Direct Traffic, Direct Traffic, meta] 1 条细心的直接流量

[谷歌、元、元、直接流量、元] 1 元元

[谷歌,元,元] 1 元元

[谷歌,元,谷歌] 4 元谷歌

现在我需要计算用户的百分比值,即有多少用户将元作为第二次点击,将关注作为第二次点击。

同样需要确定不同媒体的第三次点击百分比值。

请告知sql解决方案。

【问题讨论】:

    标签: sql amazon-athena


    【解决方案1】:

    您可以对数据进行分组并计算百分比:

    -- sample data
    with dataset(total_users, path_list) AS (
        values (1, ARRAY['google', 'meta', 'attentive', 'meta']),
        (1, ARRAY['google', 'attentive', 'Direct Traffic', 'Direct Traffic', 'Direct Traffic', 'meta']),
        (4, ARRAY ['google','meta', 'google']),
        (1, ARRAY['google', 'meta', 'meta', 'Direct Traffic' , 'meta']),
        (1, ARRAY['google', 'meta', 'meta']),
        (1, ARRAY['google', 'Direct Traffic', 'Direct Traffic','attentiva', 'attentiva', 'attentiva', 'Direct Traffic', 'meta'])
    ),
    
    -- query parts
    clicks as (
    SELECT total_users,
           path_list[2] as second_click,
           try(path_list[2]) as third_click,
           sum(total_users) over () as sum_total
    from dataset)
    
    select second_click, sum(total_users) * 1.0 / arbitrary(sum_total)
    from clicks
    group by second_click;
    

    输出:

    second_click _col1
    meta 0.8
    Direct Traffic 0.1
    attentive 0.1

    如果您希望在一个查询中返回两个分组,您可以查看分组集:

    select second_click, third_click, sum(total_users) * 1.0 / arbitrary(sum_total)
    from clicks
    group by GROUPING SETS (
        (second_click),
        (third_click));
    

    但我认为这不会那么方便。

    【讨论】:

      猜你喜欢
      • 2023-02-14
      • 1970-01-01
      • 2023-02-22
      • 2020-07-06
      • 1970-01-01
      • 2019-04-19
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多