Avez-vous des conseils sur la façon de supprimer certains groupes de cette requête ?
SELECT
sum(p.score) / count(p) as "moyenne des scores par publication",
count(p.id) as nombre_de_publications,
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 "moyenne des scores par publication",
count(p.id) as nombre_de_publications,
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
J’ai exécuté le script et je vois des membres des groupes exclus apparaître dans les résultats. Bien sûr, ils sont membres de nombreux groupes. Existe-t-il un moyen pour ce script d’exclure absolument tous les membres de tous les groupes figurant dans la liste :exclude_groups ?
Oh. D’accord. L’opérateur not in n’a pas fonctionné comme je l’avais d’abord pensé. Il ne fait presque rien. Je pense qu’il faut d’abord effectuer une requête qui récupère les utilisateurs n’appartenant à aucun groupe, puis la joindre à l’autre partie de la requête.
-- [params]
-- int_list :exclude_groups = 1,2
SELECT
sum(p.score) / count(p) as "moyenne des scores par publication",
count(p.id) as nombre_publications,
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
Vos contributions à l’écosystème Discourse et votre soutien incroyable en tant que client sont vraiment appréciés. Je suis ravi que vous offriez un service d’hébergement aussi exceptionnel !