【问题标题】:How to Parse Referral Links Using SQL如何使用 SQL 解析引用链接
【发布时间】:2020-01-17 18:58:04
【问题描述】:

你好 StackOverflow 世界,

我有一个存储所有网站会话数据的数据源,我希望分析推荐 URL 并将它们分为五类:主页 (www.mywebsite.com)、子网站 (www.mywebsite.com/employees)、外部流量GoogleYahooBing、FacebookLinkedinYoutube

为此,我必须解析引荐 URL。我已经部分弄清楚了,但是我当前的查询错误地将来自外部网站的 URL 分类,这些网站在其 URL 中包含我们的域。当我的查询运行时,它不会将这些 URL 分组为 外部流量,而是创建自己的分组作为引荐 URL 的名称。

例如,使用此 URL,您可以看到我的网站名称是如何嵌入到其 URL 中的:

https://www.helpthepeople.com/redirect.action?link=https%3A%2F%2F**www.mywebsite.com**%2Femployers%2Fblog%2Fwhat-to-do-when-asking-for-help%2F&encoded=lFAJCUeGqgrDkdlYfDwwbEfCqGlV

我得到以下输出:

www.helpthepeople.com

期望的输出:

Outside Traffic

在大多数情况下,我的查询都在工作,但只有在上面的示例出现时我才会遇到问题。有人知道写这个的更好方法吗?我的查询如下:

SELECT 
    CASE 
        WHEN referrer_page LIKE '%mywebsite.com%' 
            THEN SPLIT_PART(SPLIT_PART(referrer_page,'//',2),'/',1)
        WHEN referrer_page LIKE '%mywebsite.com/employees%' 
            THEN SPLIT_PART(SPLIT_PART(referrer_page,'.com/',2),'/',1)
         WHEN referrer_page LIKE '%google%' 
            THEN SPLIT_PART(SPLIT_PART(referrer_page,'//',2),'/',1)
        WHEN referrer_page LIKE '%yahoo%' 
            THEN SPLIT_PART(SPLIT_PART(referrer_page,'//',2),'/',1)
        WHEN referrer_page LIKE '%bing%' 
            THEN SPLIT_PART(SPLIT_PART(referrer_page,'//',2),'/',1)
        WHEN referrer_page LIKE '%facebook%'
            THEN SPLIT_PART(SPLIT_PART(referrer_page,'//',2),'/',1)
        WHEN referrer_page LIKE '%linkedin%'
            THEN SPLIT_PART(SPLIT_PART(referrer_page,'//',2),'/',1)
        WHEN referrer_page LIKE '%youtube%'
            THEN SPLIT_PART(SPLIT_PART(referrer_page,'//',2),'/',1)  
        ELSE 'outside_referral_traffic' 
    END AS url_grouping,
    referrer_page,
    session_date,
    channel,
    medium,
    web_source,
    campaign_name,
    id, 
    COUNT (DISTINCT id) AS number_of_sessions
FROM biz_sessions
WHERE session_date >= '2019-07-01' AND session_date <= '2019-07-31'
GROUP BY 
    referrer_page,
    session_date,
    channel,
    medium,
    web_source,
    campaign_name,
    id



【问题讨论】:

  • 您的 OP 在更新后与您想要的输出不匹配

标签: sql database amazon-redshift utm dbvisualizer


【解决方案1】:

SQL SERVER 中使用replacecharindexleft

declare @string varchar(800) = 'https://www.helpthepeople.com/redirect.action?link=https%3A%2F%2Fwww.mywebsite.com%2Femployers%2Fblog%2Fwhat-to-do-when-asking-for-help%2F&encoded=lFAJCUeGqgrDkdlYfDwwbEfCqGlV'

select left(replace(replace(@string,'https://www.helpthepeople.com/redirect.action?link=',''),'https%3A%2F%2F',''),charindex('%2F',replace(replace(@string,'https://www.helpthepeople.com/redirect.action?link=',''),'https%3A%2F%2F',''))-1)

您可以轻松地将其翻译成MySQL

【讨论】:

  • 我是否需要为每个被视为外部流量的 URL 或字符串声明这一点?我有数百个 URL 将流量引向该网站。
  • 您需要显示完整数据,因为此解决方案适用于旧版本的 OP。
【解决方案2】:

您的CASE 语句在第一个选项中退出,因为它满足您的网站名称在整个 URL 中的 LIKE 条件。我会用问号拆分引荐 URL,以摆脱所有可能包括您的网站 URL 和其他一些东西的参数。查询甚至可能运行得更快。

CASE 
    WHEN SPLIT_PART(referrer_page,'?',1) LIKE '%mywebsite.com%' 
    THEN SPLIT_PART(SPLIT_PART(referrer_page,'//',2),'/',1)
    ...
END

【讨论】:

    猜你喜欢
    • 2016-02-12
    • 2012-01-24
    • 2013-12-31
    • 1970-01-01
    • 2016-01-28
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多