繁体   English   中英

AWS athena中的SQL下面的output如何计算

[英]How to calculate below output in the SQL in AWS athena

我有以下结果集。

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 列指示遍历特定路径的用户数。

我想计算以下 output。

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

对于每种介质。

结果集如下所示

path_list total_users second_click third_click

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

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

[谷歌,细心,直接流量,直接流量,直接流量,元]
1 周到的直接流量

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

[谷歌,元,元]
1 元元

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

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

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

写一个SQL解决方案应该怎么做?

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

-- 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;

Output:

第二次点击 _col1
0.8
直接交通 0.1
细心 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));

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

暂无
暂无

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

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