In diesem Fall denke ich, dass etwas wie dieses die manuelle Nachschlagefunktion bieten könnte:
-- [params]
-- int :likes_received
-- int :posts_read
WITH user_activity AS (
SELECT
p.user_id,
COUNT(p.id) as posts_count
FROM posts p
LEFT JOIN topics t ON t.id = p.topic_id
WHERE p.created_at::date >= CURRENT_DATE - INTERVAL '1 YEAR'
AND t.deleted_at IS NULL
AND p.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY 1
)
SELECT
us.user_id,
us.likes_received,
us.posts_read_count,
ua.posts_count
FROM user_stats us
JOIN user_activity ua ON UA.user_id = us.user_id
WHERE us.likes_received >= :likes_received
AND us.posts_read_count >= :posts_read
AND ua.posts_count >= 10
ORDER BY 2 DESC, 3 DESC, 4 DESC
Und wenn man es anpasst/reduziert, um nur Benutzernamen anzuzeigen, erhält man eine Liste, die man in das Feld „Benutzer hinzufügen“ auf der Seite der Gruppe(n) kopieren und einfügen könnte, wenn man die Ergebnisse als CSV exportiert (und sie beispielsweise in Notepad öffnet):
-- [params]
-- int :likes_received
-- int :posts_read
WITH user_activity AS (
SELECT
p.user_id,
COUNT(p.id) as posts_count
FROM posts p
LEFT JOIN topics t ON t.id = p.topic_id
WHERE p.created_at::date >= CURRENT_DATE - INTERVAL '1 YEAR'
AND t.deleted_at IS NULL
AND p.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY 1
)
SELECT
u.username
FROM user_stats us
JOIN user_activity ua ON UA.user_id = us.user_id
JOIN users u ON u.id = us.user_id
WHERE us.likes_received >= :likes_received
AND us.posts_read_count >= :posts_read
AND ua.posts_count >= 10
ORDER BY 1
Das ist auch möglich.
Sie benötigen eine Auszeichnung (und eine Auszeichnungsabfrage) für jede Gruppe und eine begleitende Automatisierung mit dem Skript „Benutzergruppenzugehörigkeit durch Auszeichnung“. Sie könnten die Auszeichnungen auch automatisieren, anstatt sie manuell zu vergeben, indem Sie die benutzerdefinierten ausgelösten Auszeichnungen aktivieren (Enable Badge SQL und Creating triggered custom badge queries)
Es gibt jedoch viele bewegliche Teile, daher möchten Sie es in diesem Stadium vielleicht einfach halten.