Escludi gruppi dalla query Top Quality Members

Ciao,

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

Grazie in anticipo!

Non l’ho davvero testato.

-- [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

Grazie @pfaffman. È molto gentile da parte tua.

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?

Grazie per la tua attenzione.

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.

Scusa.


    -- [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

@RGJ,

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!