Alguma sugestão sobre como remover certos grupos desta consulta?
SELECT
sum(p.score) / count(p) as "média de pontuação por post",
count(p.id) as contagem_de_posts,
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
-- [params]
-- int_list :exclude_groups = 12, 2, 3
SELECT
sum(p.score) / count(p) as "média de pontuação por post",
count(p.id) as contagem_de_posts,
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
Obrigado, @pfaffman. Isso é muito gentil da sua parte.
Executei o script e vejo membros dos grupos excluídos aparecendo nos resultados. É claro, eles são membros de muitos grupos. Existe alguma maneira de este script excluir absolutamente todos os membros de todos os grupos na lista :exclude_groups?
Ah, certo. O not in não funcionou como eu imaginei inicialmente. Ele basicamente não faz nada. Acredito que o que precisa ser feito é primeiro uma consulta que obtenha usuários que não estão em nenhum grupo e, em seguida, fazer um join com a outra parte da consulta.
-- [parâmetros]
-- int_list :exclude_groups = 1,2
SELECT
sum(p.score) / count(p) as "média de pontuação por postagem",
count(p.id) as contagem_de_postagens,
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
Suas contribuições para o ecossistema Discourse e seu incrível suporte a mim como cliente são verdadeiramente apreciados. Estou entusiasmado por você oferecer um serviço de hospedagem tão incrível!