我知道fullVisitorId, visitID, visitNumber, totals.pageviews
,它们都会向我提供有关会话的信息。
我正在尝试编写一个有效的查询,这样我只会查看新用户来创建下表:
user | #visits | #total_pages | #pages/visit
我想出的示例数据库:
Row fullVisitorId visitID visitNumber page_views
1 27 15 1 10
2 27 20 2 15
3 27 1921 3 5
4 654 15 1 28
5 575 16 3 1
6 547 16 1 4
用户列中填充了fullVisitorId
,#visits是访问次数。
由于我只对新用户感兴趣,我首先写了一个查询来选择新用户,其中访问号码= 1.这是
SELECT fullVisitorId FROM (SELECT fullVisitorId, visitID, visitNumber, page_views FROM [table] WHERE visitNumber =1) GROUP BY fullVisitorId
现在,这是我数据库中的第一列,user
表已完成。
对于第二列#visits
,我需要查找访问次数,这只是属于用户的唯一visitIDs
的SUM。它应该为用户27返回3,为用户654和547返回1(注意不包括用户575)。类似的东西:
SELECT * FROM(table)WHERE fullVisitorID IN(1stQuery)删除 旧用户(仅限新增用户),然后计算访问次数。
第3列,将聚合查看的页数,并返回(10 + 15 + 5 = 30)用户27,依此类推。
最后一栏只是#total_pages和#visits的划分。
理想情况下,最后我会得到:
user | #visits | #total_pages | #pages/visit
27 3 30 10
654 1 28 28
547 1 4 4
答案 0 :(得分:1)
我会用聚合来做这件事:
SELECT fullVisitorId, COUNT(*) as NumVisits,
SUM(PageViews) as TotalPages,
AVG(PageViews) as AvgPages
FROM [table]
GROUP BY fullVisitorId
HAVING MIN(VisitNumber) = 1;
我认为通过在聚合之前进行过滤使查询更加复杂,我无法获得任何收益。