Ich glaube, dass dies aufgrund der Gruppenbeitritte tatsächlich überhöhte Zahlen liefert (außerdem gehört jeder zu einer automatischen Gruppe für sein Vertrauensniveau, daher gibt es hier eine gewisse Inkonsistenz). Ich denke, wir können diese entfernen und vielleicht ein paar Anpassungen vornehmen, um Themen, Beiträge und PMs zu fokussieren.
Ich versuche es mal.
Vielleicht so etwas wie das hier:
-- [params]
-- string :interval = 7 days
SELECT
split_part(ue.email, '@', 2) AS email_domain, -- Extrahiert den Domain-Teil der E-Mail
COUNT(p.id) AS "Gesamtbeiträge",
COUNT(p.id) FILTER (WHERE p.post_number = 1 AND t.archetype = 'regular') AS "Themen",
COUNT(p.id) FILTER (WHERE p.post_number > 1 AND t.archetype = 'regular') AS "Beiträge",
COUNT(p.id) FILTER (WHERE t.archetype = 'private_message') AS "Persönliche Nachrichtenbeiträge"
FROM posts p
JOIN user_emails ue ON p.user_id = ue.user_id AND ue.primary = TRUE -- Stellt sicher, dass die primäre E-Mail verwendet wird
JOIN topics t ON t.id = p.topic_id
WHERE p.created_at >= CURRENT_DATE - INTERVAL :interval -- Filtert Beiträge aus den letzten x Zeit basierend auf dem Parameter
AND p.user_id > 0 -- Schließt Systembenutzer (System und Bots) aus
AND p.deleted_at ISNULL
AND t.deleted_at ISNULL
AND p.post_type <> 3
GROUP BY email_domain
ORDER BY "Gesamtbeiträge" DESC -- Sortiert die Ergebnisse nach der Anzahl der Beiträge absteigend