Tengo una base de datos que contiene ID de sesión y nombres de página. Me gustaría obtener una lista de los ID de sesión a los que el usuario fue a las 4 páginas de 'Carrito', 'UserInfo', 'Pagar' y 'Confirmar'.

Supongamos que nuestra mesa es así:

Sessionid, PageName
939j     , Home
9d3k     , Login
e9se     , Cart
efw0     , Checkout
e9se     , UserInfo

Etcetera...

¿Alguna sugerencia sobre cómo hacer algo como esto?

sql
-1
Another Mike 15 ago. 2020 a las 19:40

2 respuestas

La mejor respuesta

Puede utilizar:

select sessionid
from t
group by sessionid
having count(distinct pagename) = 4

Lo anterior asume que los cuatro nombres de página que mencionó son los únicos. Si hay otros, filtre antes de agregar:

select sessionid
from t
where pagename in ('Cart','UserInfo','Checkout', 'Confirm')
group by sessionid
having count(distinct pagename) = 4
0
Gordon Linoff 15 ago. 2020 a las 16:48

Si 'Cart', 'UserInfo', 'Checkout' y 'Confirm' son todos los nombres de página distintos en la tabla, entonces agrupe por sessionid y establezca la condición en la cláusula HAVING:

SELECT sessionid
FROM tablename
GROUP BY sessionid
HAVING COUNT(DISTINCT pagename) = (SELECT COUNT(DISTINCT pagename) FROM tablename)
0
forpas 15 ago. 2020 a las 17:09