使用以下MySQL查询,我想匹配page
同时/signup
的位置,然后在用户流/confirm
SELECT COUNT(*) as `total` FROM (
SELECT COUNT(DISTINCT t.user_id) AS `visitors`
FROM `tracks` t
JOIN `user_details` u ON u.id=t.user_id AND u.site_id=t.site_id
WHERE t.site_id='334565'
AND (t.page = '/signup' AND t.page = '/confirm')
AND t.timestamp BETWEEN '2015-01-23 00:00:00' AND '2015-04-30 23:59:59'
GROUP BY t.user_id, t.track_id
) as a
这个查询的主要问题是MySQL不能像我尝试使用它那样工作(错误)。 另一个问题是返回的订单可能不正确,因此也需要按指定的顺序。
也许这个查询需要以完全不同的方式完成,但我不确定我是否在正确的轨道上。
之前是否有人这样做过,或者有更好的方法来完成工作?
请注意,上述WHERE子句可以匹配page
以上的内容,可以是t.referrer
或u.somethingelse
另一个例子是:
SELECT COUNT(*) as `total` FROM (
SELECT COUNT(DISTINCT t.user_id) AS `visitors`
FROM `tracks` t
JOIN `user_details` u ON u.id=t.user_id AND u.site_id=t.site_id
WHERE t.site_id='334565'
AND (u.browser = 'chrome' AND t.referrer_host = 'google.com' AND t.page = '/confirm' and t.page = '/preferences')
AND t.timestamp BETWEEN '2015-01-23 00:00:00' AND '2015-04-30 23:59:59'
GROUP BY t.user_id, t.track_id
) as a
每个u.browser
,t.referrer_host
,t.page
都是目标,我trying
将它们全部显示为漏斗。分析程序如何实现它。
答案 0 :(得分:1)
我假设这是跟踪网页访问者(不是一个艰难的假设),每个网址/页面端点在跟踪表中都有自己的条目。
要查找同时访问这两个页面的用户,您需要将跟踪表加入自身。像这样:
SELECT COUNT(DISTINCT t1.user_id) AS `visitors`
FROM `tracks` t1
JOIN `user_details` u ON u.id=t1.user_id AND u.site_id=t1.site_id
join `tracks` t2 on t1.site_id = t2.site_id and u.id = t2.user_id and t1.track_id <> t2.track_id
WHERE t1.site_id='334565'
AND (t1.page = '/signup' AND t2.page = '/confirm')
AND t1.timestamp BETWEEN '2015-01-23 00:00:00' AND '2015-04-30 23:59:59'
我认为没有必要进行分组,因为我认为您只需要注册的访问者数量不同,然后确认。