我想在PostgreSQL中写一个查询:用户通过产品页面返回网站的会话的平均会话页面视图数。
天 | 时间 | 会话用户id页面类型 | [/tr>|||
---|---|---|---|---|---|
12 | 14:16:15 | 709 | 696位置 | ||
5 | 20:18:49 | de1 | d8d | 位置 | |
13 | 15:58:23 | 199 | 产品|||
13 | 16:00:07 | <199>f4c | 预订详细信息|||
13 | 16:04:55 | <199>f4c | 产品|||
13 | 16:04:58 | <199>f4c | 其他 | ||
11 | 14:08:23 | 4c1 | 58f | 产品||
12 | 21:16:52 | ddcbb9产品 | |||
12 | 21:17:38 | ddcbb9产品 | |||
6 | 6:28:06 | eb3 | c57 | 产品||
6 | 6:28:10 | eb3 | c57 | 产品 | |
6 | 6:48:32 | eb3 | c57 | 产品||
6 | 6:48:36 | eb3 | c57 | 产品||
8 | 5:42:56 | 86b | c57 | 产品||
8 | 5:42:59 | 86b | c57 | 产品||
8 | 5:43:05 | 86b | c57 | 预订详细信息 | |
10 | 15:48:53 | >6dc | c57 | 产品||
10 | 17:23:12 | 586 | c57 | 产品
好!由于没有人回答我的问题,我终于自己找到了答案,你可以找到如下。请注意,答案是基于MYSQL而不是PostgreSQL编写的。此外,以下列名称已被替换:
session_id=sessionid,userid=user_fingerprint,page_type=page_views
很抱歉,给您带来不便!我不想编辑我的首字母。
SELECT COUNT(e.sessionid)/COUNT(DISTINCT e.session_id) 'PageViews/Sessions'
FROM page_views e
JOIN (
SELECT a.PRIMARY_KEY , a.user_fingerprint, c.sessions_per_user, a.session_id,
a.page_type
FROM page_views a
JOIN (
SELECT b.user_fingerprint, COUNT(DISTINCT b.session_id) sessions_per_user
FROM page_views b
GROUP BY b.user_fingerprint
) AS c ON a.user_fingerprint = c.user_fingerprint
GROUP BY a.session_id
HAVING (c.sessions_per_user > 1 AND RTRIM(a.page_type) = 'product') AND
(a.PRIMARY_KEY NOT IN(
SELECT MIN(d.PRIMARY_KEY)
FROM page_views d
GROUP BY d.user_fingerprint
))
) f ON f.session_id=e.session_id
;
它对我有效,我希望它对你也有效!