通过类似的字符串查询redshift分组

时间:2019-09-16 15:06:11

标签: sql amazon-redshift

我在Amazon redshift中有一个表,其中列出了api端点及其使用情况,并且需要查询使用情况统计信息。不幸的是,某些端点的名称中包含id,因此无论URL中包含什么id,我都需要一种按endopint分组的方法。

示例数据:

endpoint
'a/b/c'
'a/b/c/19'
'd/20'
'd/1'
'e/f'
'e/f'

我需要一个可以获取这些数据并输出的查询

endpoint, count(*)
'a/b/c/*', 2
'd/*',     2
'e/f'      2

到目前为止,我只是尝试使用类似的方式排除具有特定ID的人

SELECT 
    endpoint, count(*) 
FROM 
    api_requests 
WHERE 
    endpoint NOT LIKE '%/[0-9]/%'
GROUP BY 
    endpoint 
ORDER BY 
    count(*) 
DESC;

但是 a)由于某些原因,该方法不起作用,并且 b)理想情况下,我将它们按照ID分组

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以使用regexp_replace()

select regexp_replace(endpoint, '/[0-9]+$', '') as canonical,
       count(*)
from api_requests 
group by canonical;

如果所有的都是全数字,它将摆脱最后的分组。