Hai qualche consiglio su come rimuovere certi gruppi da questa query?
SELECT
sum(p.score) / count(p) as "punteggio medio per post",
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
-- [params]
-- int_list :exclude_groups = 12, 2, 3
SELECT
sum(p.score) / count(p) as "media dei punteggi per post",
count(p.id) as conteggio_post,
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
Ho eseguito lo script e vedo che membri dei gruppi esclusi appaiono nei risultati. Ovviamente, sono membri di molti gruppi. Esiste un modo per far sì che questo script escluda assolutamente tutti i membri di tutti i gruppi nell’elenco :exclude_groups?
Oh. Giusto. not in non ha funzionato come pensavo inizialmente. Di fatto non fa quasi nulla. Penso che sia necessario eseguire prima una query che recuperi gli utenti non appartenenti a nessun gruppo e poi unire il risultato con l’altra parte della query.
-- [parametri]
-- int_list :exclude_groups = 1,2
SELECT
sum(p.score) / count(p) as "media punteggio per post",
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
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
I tuoi contributi all’ecosistema Discourse e il tuo incredibile supporto come cliente sono davvero apprezzati. Sono entusiasta che tu offra un servizio di hosting così straordinario!