Olá, pessoal,
Temos um programa em nossa comunidade no qual promovemos certos membros assíduos ao status de PosBuddy. São usuários regulares que compartilham o tom de voz de nossas marcas e demonstraram aptidão para responder perguntas, impulsionar conversas e acolher novos membros na comunidade.
Esse programa concede a esses usuários o TL4; eles têm seu próprio grupo privado dentro da comunidade e a capacidade de fechar, mesclar e mover posts, mantendo, de modo geral, a comunidade organizada. Também oferecemos a esses membros muitos benefícios excelentes, como produtos gratuitos, mercadorias e convites exclusivos para nossas apresentações de desenvolvimento. Como podem imaginar, há grandes incentivos para que eles avancem até o TL3 e contribuam para nossa comunidade.
Frequentemente, queremos saber quais usuários estão quase no TL3, mas ainda não chegaram lá. Para isso, analisamos centenas de usuários do TL2 a cada mês, verificamos o quão distantes eles estão de atingir o TL3 e conferimos os requisitos da tabela de Nível de Confiança 3.
Queremos facilitar esse processo, por isso temos uma consulta no Data Explorer que mostra a maior parte das informações que precisamos em uma única visão. No entanto, não consigo descobrir como incluir os seguintes campos na consulta listada abaixo:
- Tópicos respondidos
- Posts sinalizados
- Usuários que sinalizaram
- Curtidas recebidas: dias únicos
- Curtidas recebidas: usuários únicos
- Silenciado (tempo todo)
- Suspenso (tempo todo)
Se alguém puder ajudar, ficarei eternamente grato.
-- [params]
-- int :from_days_ago = 0
-- int :duration_days = 100
with
t as (
select
CURRENT_TIMESTAMP - ((:from_days_ago + :duration_days) * (INTERVAL '1 days')) as start,
CURRENT_TIMESTAMP - (:from_days_ago * (INTERVAL '1 days')) as end
),
pr as (
select user_id,
count(1) as visits,
sum(posts_read) as posts_read
from user_visits, t
where posts_read > 0
and visited_at > t.start
and visited_at < t.end
group by user_id
),
pc as (
select user_id,
count(1) as posts_created
from posts, t
where created_at > t.start
and created_at < t.end
group by user_id
),
ttopics as (
select user_id, posts_count
from topics, t
where created_at > t.start
and created_at < t.end
),
tc as (
select user_id,
count(1) as topics_created
from ttopics
group by user_id
),
twr as (
select user_id,
count(1) as topics_with_replies
from ttopics
where posts_count > 1
group by user_id
),
tv as (
select user_id,
count(distinct(topic_id)) as topics_viewed
from topic_views, t
where viewed_at > t.start
and viewed_at < t.end
group by user_id
),
likes as (
select
post_actions.user_id as given_by_user_id,
posts.user_id as received_by_user_id
from t, post_actions
left join posts
on post_actions.post_id = posts.id
where post_actions.created_at > t.start
and post_actions.created_at < t.end
and post_action_type_id = 2
),
lg as (
select given_by_user_id as user_id,
count(1) as likes_given
from likes
group by user_id
),
lr as (
select received_by_user_id as user_id,
count(1) as likes_received
from likes
group by user_id
),
e as (
select email, user_id
from user_emails u
where u.primary = true
)
select pr.user_id,
coalesce(visits,0) as "Visits",
coalesce(topics_viewed,0) as "Topics Viewed",
coalesce(posts_read,0) as "Posts Read",
coalesce(posts_created,0) as "Posts Created",
coalesce(topics_created,0) as "Topics Created",
coalesce(topics_with_replies,0) as "Topics with Replies",
coalesce(likes_given,0) as "Likes Given",
coalesce(likes_received,0) as "Likes Received"
from pr
left join tv using (user_id)
left join pc using (user_id)
left join tc using (user_id)
left join twr using (user_id)
left join lg using (user_id)
left join lr using (user_id)
left join e using (user_id)
left join users on pr.user_id = users.id
order by
visits desc,
posts_read desc,
posts_created desc
