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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top