Penso che in realtà fornisca numeri gonfiati a causa delle adesioni ai gruppi (inoltre, tutti fanno parte di un gruppo automatico per il loro livello di fiducia, quindi c’è un po’ di incoerenza lì). Penso che possiamo eliminare quelli e magari aggiungere un paio di modifiche per concentrarci su argomenti, post e PM.
Lasciami provare.
Forse qualcosa del genere:
-- [params]
-- string :interval = 7 days
SELECT
split_part(ue.email, '@', 2) AS email_domain, -- Estrae la parte del dominio dell'email
COUNT(p.id) AS "Post totali",
COUNT(p.id) FILTER (WHERE p.post_number = 1 AND t.archetype = 'regular') AS "Argomenti",
COUNT(p.id) FILTER (WHERE p.post_number > 1 AND t.archetype = 'regular') AS "Post",
COUNT(p.id) FILTER (WHERE t.archetype = 'private_message') AS "Post messaggi privati"
FROM posts p
JOIN user_emails ue ON p.user_id = ue.user_id AND ue.primary = TRUE -- Assicura che stiamo usando l'email primaria
JOIN topics t ON t.id = p.topic_id
WHERE p.created_at >= CURRENT_DATE - INTERVAL :interval -- Filtra i post degli ultimi x tempo in base al parametro
AND p.user_id > 0 -- Esclude gli utenti di sistema (sistema e bot)
AND p.deleted_at ISNULL
AND t.deleted_at ISNULL
AND p.post_type <> 3
GROUP BY email_domain
ORDER BY "Post totali" DESC -- Ordina i risultati per conteggio dei post in ordine decrescente