Ich habe sie zusammengeführt und verbessert (mit meinen schlechten SQL-Kenntnissen). Wenn ich Benutzernamen benötige, lade ich einfach die CSV-Datei herunter und kopiere/füge die Benutzerspalte ein.
Ich habe likes_received_max hinzugefügt, damit ich Gruppen ausschließen kann, die oben genannte Gruppe ausgenommen.
Zum Beispiel:
first_steps: 5 Likes (<30), 500 gelesene Beiträge, >5 Beiträge im letzten Jahr,
beginners: 30 Likes (<100), 1000 gelesene Beiträge, >10 Beiträge im letzten Jahr
padawan: 100 Likes, 2000 gelesene Beiträge, >10 Beiträge im letzten Jahr
hero: 200 Likes, 5000 gelesene Beiträge, >10 Beiträge im letzten Jahr
-- [params]
-- int :likes_received
-- int :posts_read
-- int :likes_received_max
-- int :posts_count
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,
u.username,
us.likes_received,
us.posts_read_count,
ua.posts_count,
u.title
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 >= :posts_count
AND us.likes_received < :likes_received_max
ORDER BY 2 ASC, 3 ASC, 4 ASC