0

我在一个表中有两列:VisitorID 和 URL。

对于访问者进行的每个页面视图,表中都存在一个条目。我想查看每个访问者的总访问次数,其中访问者组中的所有 URL 都不像“%page=checkout%”。

我在想它是这样的:

选择 *, COUNT(*) 作为 TotalVisits
来自“访客日志”
按访客 ID 分组
HAVING `URL` 不在(SELECT * FROM ?? WHERE `URL` LIKE "%page=checkout%")

但是我不完全理解 HAVING 子句如何与子查询一起使用,如果我需要子查询等等?以及如何使消极?

并且任何可以解释答案的人都可以获得奖励积分,以便我下次可以自己做!

谢谢,

缺口

4

3 回答 3

2
SELECT *, COUNT(*) AS TotalVisits
FROM `VisitorLog`
WHERE 
    VisitorID NOT IN 
        (SELECT VisitorID FROM `VisitorLog` WHERE `URL` LIKE '%page=checkout%')
GROUP BY VisitorID
于 2010-11-04T11:20:48.913 回答
0

我假设您URLvisitorLog表中的字段是foreign_key 和整数字段。

SELECT v1.VisitorID, COUNT(v1.VisitorID) AS TotalVisits
FROM `VisitorLog` v1, ?? as v2
WHERE v1.URL = v2.URL_ID
AND v2.URL NOT LIKE "%page=checkout%"
GROUP BY VisitorID

据我了解,例如。

id visitor_id 日期时间页面
1 月 1 日 11 月 4 日 关于我们
2 月 1 日 11 月 4 日 联系我们
3 2 Nov4 关于我们
4 月 2 日 11 月 3 日 关于我们
5 月 2 日 11 月 4 日回家
6 月 1 日 11 月 4 日回家


    选择 visitor_id, count(id) 作为访问次数
    FROM visit_table_transaction
    WHERE 日期时间 = "Nov4"
    按访客 ID 分组
    访问次数 > 2

所以结果是
visitor_id 访问次数
1 3

为什么需要使用having,因为聚合函数不能用于WHERE

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

你也可以这样写

select visitor_id, count(id) as numberofvisits 
FROM visit_table_transaction 
WHERE datetime = "Nov4"
GROUP BY visitor_id
HAVING count(id) > 2

下面错了

 select visitor_id, count(id) as numberofvisits 
 FROM visit_table_transaction 
 WHERE datetime = "Nov4"
 AND count(id) > 2
 GROUP BY visitor_id 

如果我错了,请任何人纠正我。谢谢。

于 2010-11-04T12:03:04.867 回答
0
select VisitorID, count(*)
from VisitorLog
where (select count(*) from VisitorLog v2 where v2.VisitorID = VisitorLog.VisitorID and v2.URL like '%page=checkout%') = 0
;
于 2010-11-04T11:21:03.480 回答