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

表中存在一个条目,每页都可以查看访问者制作的条目。我想看看每个访问者的访问总数,其中访问者组中的URL都不喜欢“%page = checkout%”。

我认为这是这样的:

SELECT *, COUNT(*) AS TotalVisits
FROM `VisitorLog`
GROUP BY VisitorID
HAVING `URL` NOT IN (SELECT * FROM ?? WHERE `URL` LIKE "%page=checkout%")

但是我不完全理解have rause如何与子查询一起使用,如果我完全需要子查询,等等?以及如何使负面影响?

并为任何可以解释答案的人加分点,以便我下次可以自己做!

谢谢,

缺口

有帮助吗?

解决方案

SELECT *, COUNT(*) AS TotalVisits
FROM `VisitorLog`
WHERE 
    VisitorID NOT IN 
        (SELECT VisitorID FROM `VisitorLog` WHERE `URL` LIKE '%page=checkout%')
GROUP BY VisitorID

其他提示

select VisitorID, count(*)
from VisitorLog
where (select count(*) from VisitorLog v2 where v2.VisitorID = VisitorLog.VisitorID and v2.URL like '%page=checkout%') = 0
;

我想你 URL 字段中 visitorLog 表是外国_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    datetime    page
1       1             Nov4        about us
2       1             Nov4        contact us
3       2             Nov4        about us
4       2             Nov3        about us
5       2             Nov4        home
6       1             Nov4        home


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

So the result is 
visitor_id      numberofvisits
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 

如果我错了,请纠正我。谢谢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top