33 lines
964 B
SQL
33 lines
964 B
SQL
/* Q5. Most active Posters of a given Topic
|
|
\set tag '\'Abbas_I_of_Persia\''
|
|
*/
|
|
WITH detail AS (
|
|
SELECT cr.p_personid AS person_id
|
|
, count(DISTINCT r.m_messageid) AS replyCount
|
|
, count(DISTINCT l.l_messageid||' '||l.l_personid) AS likeCount
|
|
, count(DISTINCT m.m_messageid) AS messageCount
|
|
, null as score
|
|
FROM tag t
|
|
, message_tag pt
|
|
, message m LEFT JOIN message r ON (m.m_messageid = r.m_c_replyof)
|
|
LEFT JOIN likes l ON (m.m_messageid = l.l_messageid) -- l: likes to m
|
|
, person cr -- creator
|
|
WHERE 1=1
|
|
-- join
|
|
AND t.t_tagid = pt.mt_tagid
|
|
AND pt.mt_messageid = m.m_messageid
|
|
AND m.m_creatorid = cr.p_personid
|
|
-- filter
|
|
AND t.t_name = 'Abbas_I_of_Persia'
|
|
GROUP BY cr.p_personid
|
|
)
|
|
SELECT person_id AS "person.id"
|
|
, replyCount
|
|
, likeCount
|
|
, messageCount
|
|
, 1*messageCount + 2*replyCount + 10*likeCount AS score
|
|
FROM detail
|
|
ORDER BY score DESC, person_id
|
|
LIMIT 100
|
|
;
|