根据第一个路径聚合 Urls

Aggregate Urls based on first path

假设我有一个 table,里面有一堆 URL

             URL                      Some_Value     
------------------------------------------------
0 www.google.com/help/experience          3
1 www.google.com/help/tutorial            1
2 www.google.com/signup                   0
3 www.google.com/signup/form              199
4 www.google.com/signup/believe           3 
5 www.google.com/signup/new               1
6 www.google.com/welcome/kr               15
7 www.google.com/help/location            2
8 www.google.com/store/shirts             1

我想将值聚合到 URL 中的第一条路径,我该怎么做?

所以它看起来像这样:

       URL             agg_value
www.google.com/help.   6
www.google.com/signup  193
www.google.com/store.  1
www.google.com/welcome 15
etc...

我知道 substr() 是执行此操作的最佳方法,但我不知道如何使用 substr 在第二个 '/' 处停止

select substr('www.google.com/store/shirts',1,5)

可以使用正则表达式获取 URL 路径中的第一个文件夹。

SELECT regexp_extract(URL, '^[^\/]*\/[\w-]+') AS URL, sum(Some_Value) AS agg_value
FROM mytable
GROUP BY 1

正则表达式模式:

  • ^ - URL 字符串的开始
  • [^\/]* - 除了 /
  • 之外的任何字符
  • \/ - / 字符
  • [\w-]+ - 一个或多个单词字符 a-zA-Z0-9_ 和连字符 -