유사한 기존 콘텐츠에 상호작용한 사용자를 찾아서 이벤트 참석률을 높이려는 시도를 하고 있습니다. AI 봇의 도움으로 다음 쿼리를 작성할 수 있었습니다.
-- [params]
-- text :keyword
-- int :min_engagements
-- null string :tag_name
WITH keyword_posts AS (
SELECT
p.id AS post_id
FROM
posts p
JOIN
topics t ON t.id = p.topic_id
LEFT JOIN
topic_tags tt ON tt.topic_id = t.id
LEFT JOIN
tags tg ON tg.id = tt.tag_id
WHERE
p.raw ILIKE '%' || :keyword || '%'
AND (:tag_name is null OR tg.name = :tag_name)
),
user_engagement AS (
SELECT
ua.user_id,
COUNT(DISTINCT ua.target_post_id) AS engaged_posts_count
FROM
user_actions ua
JOIN
keyword_posts kp ON kp.post_id = ua.target_post_id
WHERE
ua.action_type IN (1, 4, 5, 6)
AND ua.user_id NOT IN (
SELECT gu.user_id
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
WHERE g.name = 'developer_relations'
)
GROUP BY
ua.user_id
)
SELECT
ue.user_id,
ue.engaged_posts_count
FROM
user_engagement ue
WHERE
ue.engaged_posts_count >= :min_engagements
ORDER BY
ue.engaged_posts_count DESC
사용자들이 자연스럽게 이벤트를 발견하고 RSVP할 시간을 주지만, 이벤트가 가까워질수록 더 타겟팅된 초대장을 보내고 싶습니다. 이를 위해 기존 RSVP 목록을 대조하여 타겟 사용자 목록에서 해당 사용자들을 제외해야 합니다. #data-explorer를 통해 이 RSVP 목록에 접근할 방법이 있을까요?
수동으로 접근하는 방법을 찾은 것은 이벤트 객체의 내보내기(Export) 옵션을 사용하는 것이 유일합니다:
봇으로 아래 작업을 진행해 보았지만, 결과가 0건으로 반환됩니다. (30명 이상이 응답한 것을 확인하고 있습니다. WHERE 구문을 제거하면 쿼리가 정상적으로 동작합니다.)
-- [params]
-- text :event_url = 'https://developer.sailpoint.com/discuss/t/deploying-the-beyondtrust-password-safe-connector-for-identityiq-with-michel-bluteau/68228'
SELECT
users.username AS "Username",
invitees.status AS "RSVP Status",
invitees.updated_at AS "Last Updated"
FROM
discourse_post_event_events AS events
JOIN
discourse_post_event_invitees AS invitees
ON
events.id = invitees.post_id
JOIN
users
ON
invitees.user_id = users.id
WHERE
events.url = :event_url
-- [params]
-- text :keyword
-- int :min_engagements
-- null string :tag_name
-- post_id :event_post
WITH keyword_posts AS (
SELECT
p.id AS post_id
FROM posts p
JOIN topics t ON t.id = p.topic_id
LEFT JOIN topic_tags tt ON tt.topic_id = t.id
LEFT JOIN tags tg ON tg.id = tt.tag_id
WHERE p.raw ILIKE '%' || :keyword || '%'
AND (:tag_name is null OR tg.name = :tag_name)
),
user_engagement AS (
SELECT
ua.user_id,
COUNT(DISTINCT ua.target_post_id) AS engaged_posts_count
FROM user_actions ua
JOIN keyword_posts kp ON kp.post_id = ua.target_post_id
WHERE ua.action_type IN (1, 4, 5, 6)
AND ua.user_id NOT IN (SELECT user_id FROM group_users WHERE group_id = 41)
GROUP BY ua.user_id
)
SELECT
ue.user_id,
ue.engaged_posts_count
FROM user_engagement ue
WHERE ue.engaged_posts_count >= :min_engagements
AND ue.user_id NOT IN (SELECT user_id FROM discourse_post_event_invitees WHERE post_id = :event_post AND status = 0)
ORDER BY ue.engaged_posts_count DESC
event_url 파라미터의 경우, 게시글 번호가 끝에 포함된 주제 URL을 허용합니다. 즉, https://developer.sailpoint.com/discuss/t/deploying-the-beyondtrust-password-safe-connector-for-identityiq-with-michel-bluteau/68228/1 형태(끝에 /1이 없는 주제 버전이 아닌)의 URL을 의미합니다.