题
我在表中有两个列: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
如果我错了,请纠正我。谢谢。
不隶属于 StackOverflow