我在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分组
任何帮助将不胜感激
答案 0 :(得分:1)
您可以使用regexp_replace()
:
select regexp_replace(endpoint, '/[0-9]+$', '') as canonical,
count(*)
from api_requests
group by canonical;
如果所有的都是全数字,它将摆脱最后的分组。