MySQL: No tener una cadena como en un grupo?
Pregunta
Tengo dos columnas en una tabla:. VisitorID y URL
Existe una entrada en la tabla para cada página vista A las marcas de los visitantes. Me gustaría ver el número total de visitas para cada visitante, donde ninguna de las direcciones URL en el grupo de visitante son como "la página% =% de pago".
Estoy pensando que es algo como esto:
SELECT *, COUNT(*) AS TotalVisits FROM `VisitorLog` GROUP BY VisitorID HAVING `URL` NOT IN (SELECT * FROM ?? WHERE `URL` LIKE "%page=checkout%")
Pero no entiendo por completo la forma en la cláusula HAVING trabaja con una sub-consulta, si necesito una sub-consulta en absoluto, etc? Y cómo hacer que tenga negativo?
y puntos de bonificación para cualquier persona que pueda explicar la respuesta para que pueda hacerlo yo mismo la próxima vez!
Gracias,
Nick
Solución
SELECT *, COUNT(*) AS TotalVisits
FROM `VisitorLog`
WHERE
VisitorID NOT IN
(SELECT VisitorID FROM `VisitorLog` WHERE `URL` LIKE '%page=checkout%')
GROUP BY VisitorID
Otros consejos
select VisitorID, count(*)
from VisitorLog
where (select count(*) from VisitorLog v2 where v2.VisitorID = VisitorLog.VisitorID and v2.URL like '%page=checkout%') = 0
;
Asumo su campo URL
en la tabla visitorLog
es foreign_key campo y número entero.
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
A mi entender, por ejemplo.
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
¿Por qué usted necesita para su uso having
, porque la función de agregado no puede ser su uso en WHERE
http://dev.mysql.com/ doc / RefMan / 5,0 / en / grupo por functions.html
También puede escribir como este
select visitor_id, count(id) as numberofvisits
FROM visit_table_transaction
WHERE datetime = "Nov4"
GROUP BY visitor_id
HAVING count(id) > 2
A continuación está mal
select visitor_id, count(id) as numberofvisits
FROM visit_table_transaction
WHERE datetime = "Nov4"
AND count(id) > 2
GROUP BY visitor_id
Cualquiera favor, corríjanme si estoy equivocado. Gracias.