활동 기반 그룹 생성 쿼리

그 경우, 다음과 같은 쿼리를 사용하면 수동 조회를 제공할 수 있습니다:

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

그리고 이를 조정하거나 사용자 이름만 남기도록 단순화하면, 결과를 CSV로 내보내고(예: 메모장 같은 프로그램으로 열면) 그룹 페이지의 ‘Add Users’ 상자에 복사하여 붙여넣을 수 있는 목록을 얻을 수 있습니다:

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

이것도 가능합니다. :partying_face: 각 그룹마다 배지(와 배지 쿼리) 하나씩이 필요하며, 'User Group Membership through Badge` 스크립트를 사용하는 자동화가 필요합니다. 수동으로 배지를 부여하는 대신 Custom Triggered Badges를 활성화하여 배지 부여도 자동화할 수 있습니다(Enable Badge SQL 및 Creating triggered custom badge queries).

다만, 움직이는 부품이 많으므로 이 단계에서는 단순하게 유지하는 것이 좋을 수 있습니다.