¿Alguna recomendación sobre cómo puedo eliminar ciertos grupos de esta consulta?
SELECT
sum(p.score) / count(p) as "promedio de puntuación por publicación",
count(p.id) as post_count,
p.user_id
FROM posts p
JOIN users u ON u.id = p.user_id
WHERE p.created_at >= CURRENT_DATE - INTERVAL '3 month'
AND u.active
GROUP by user_id, u.views
HAVING count(p.id) > 40
ORDER BY sum(p.score) / count(p) DESC
LIMIT 100
-- [parámetros]
-- int_list :exclude_groups = 12, 2, 3
SELECT
sum(p.score) / count(p) as "puntuación promedio por publicación",
count(p.id) as conteo_publicaciones,
p.user_id
FROM posts p
JOIN users u ON u.id = p.user_id
LEFT JOIN group_users gu on u.id = gu.user_id
WHERE p.created_at >= CURRENT_DATE - INTERVAL '3 month'
AND u.active
AND (gu.group_id not IN (:exclude_groups))
GROUP by p.user_id, u.views
HAVING count(p.id) > 40
ORDER BY sum(p.score) / count(p) DESC
LIMIT 100
Gracias, @pfaffman. Eso es muy amable de tu parte.
Ejecuté el script y veo que aparecen en los resultados miembros de los grupos excluidos. Por supuesto, son miembros de muchos grupos. ¿Existe alguna forma de que este script excluya absolutamente a todos los miembros de todos los grupos en la lista :exclude_groups?
Oh. Claro. El not in no funcionó como pensé al principio. Básicamente no hace nada. Creo que lo que hay que hacer es primero una consulta que obtenga los usuarios que no están en ningún grupo y luego unir eso con la otra parte de la consulta.
-- [parámetros]
-- int_list :exclude_groups = 1,2
SELECT
sum(p.score) / count(p) as "puntuación promedio por publicación",
count(p.id) as conteo_publicaciones,
p.user_id
FROM posts p
JOIN users u ON u.id = p.user_id
WHERE p.created_at >= CURRENT_DATE - INTERVAL '3 month'
AND u.active
AND u.id NOT IN(
SELECT user_id FROM group_users WHERE group_id IN (:exclude_groups)
)
GROUP BY user_id, u.views
HAVING count(p.id) > 40
ORDER BY sum(p.score) / count(p) DESC
LIMIT 100
Agradecemos mucho tus contribuciones al ecosistema de Discourse y tu increíble apoyo como cliente. ¡Me emociona que ofrezcas un servicio de alojamiento tan extraordinario!