sequenceCount匹配链路,举例
时间: 2024-01-03 16:06:03 浏览: 55
假设我们有一个包含多个用户访问网站的日志数据,其中每条日志记录了用户的 ID 和用户访问的页面路径信息。我们想要统计每个用户访问特定页面路径的次数,可以使用 `sequenceCount` 函数来实现。
假设我们要统计用户访问路径中包含 `/product/detail` 的次数,我们可以先将每个用户的访问路径组成一个数组,然后使用 `sequenceCount` 函数进行计数。具体查询语句如下所示:
```
SELECT
userId,
sequenceCount(arrayFilter(x -> x LIKE '/product/detail%', visitPath), '/product/detail') AS cnt
FROM (
SELECT
userId,
arrayJoin(['/', '/product', '/product/detail', '/product/detail/123', '/product/comment']) AS visitPath
FROM (
SELECT
1 AS userId,
toDateTime('2022-01-01 10:00:00') AS visitTime
UNION ALL SELECT
1 AS userId,
toDateTime('2022-01-01 10:10:00') AS visitTime
UNION ALL SELECT
1 AS userId,
toDateTime('2022-01-01 10:20:00') AS visitTime
UNION ALL SELECT
2 AS userId,
toDateTime('2022-01-01 11:00:00') AS visitTime
UNION ALL SELECT
2 AS userId,
toDateTime('2022-01-01 11:30:00') AS visitTime
UNION ALL SELECT
2 AS userId,
toDateTime('2022-01-01 12:00:00') AS visitTime
)
ARRAY JOIN [visitTime + INTERVAL rand(60) MINUTE] AS visitTime,
[visitPath, '/home', '/product', '/product/detail/123', '/product/comment'] AS visitPath
)
GROUP BY userId
```
在上述查询中,我们先使用 `arrayJoin` 函数将每个用户的访问路径组成一个数组,然后使用 `arrayFilter` 函数过滤出包含 `/product/detail` 的路径,再使用 `sequenceCount` 函数计算包含 `/product/detail` 的路径出现的次数。
执行上述查询的结果如下所示:
```
userId cnt
1 2
2 1
```
即用户 1 访问包含 `/product/detail` 的路径出现了 2 次,用户 2 访问包含 `/product/detail` 的路径出现了 1 次。
阅读全文