Dibujó Pham:
¿Cómo puedo encontrar el equipo con más vendedores activos (mayor número de ventas de software por usuario por día)? Yo quería hacer algo como esta consulta pero no se siente bien tranquila
SELECT users.team_id, count(*) as sales FROM users
INNER JOIN activity ON users.user_id = activity.user_id
WHERE activity.sales = software
GROUP BY users.team_id
ORDER BY sale DESC
Mi tabla de usuario se ve así:
user_id team_id
0 62
1 32
2 21
Mientras mi mesa de actividades es el siguiente:
user_id sale_date sale
1 2019-05-02 11:02:39 hardware
2 2018-05-02 11:02:53 software
2 2019-06-02 11:42:33 software
Berg
Suena como esto es una consulta de paso a paso, así que vamos a empezar poco a poco con la parte más interna: llevar los conteos de ventas por usuario por día.
SELECT sale_date, user_id, count(*) as sales
WHERE sale = 'software'
GROUP BY sale_date, user_id
A continuación, podemos conseguir que el usuario más activo para cada día :
SELECT DISTINCT ON (sale_date) sale_date, user_id
FROM (
SELECT sale_date, user_id, count(*) as sales
WHERE sale = 'software'
GROUP BY sale_date, user_id
) AS counts_by_date_and_user
ORDER BY sale_date, sales -- consider breaking ties somehow
Entonces podemos contar con qué frecuencia un usuario fue el más activo del día, ordenar por eso, y obtener su Identificación del equipo.
SELECT team_id, user_id, count(*) as days
FROM (
SELECT DISTINCT ON (sale_date) sale_date, user_id
FROM (
SELECT sale_date, user_id, count(*) as sales
WHERE sale = 'software'
GROUP BY sale_date, user_id
) AS counts_by_date_and_user
ORDER BY sale_date, sales -- consider breaking ties somehow
) AS most_active
JOIN users USING (user_id)
GROUP BY user_id
ORDER BY days DESC