-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathForumHighLevelActivitySummary.sql
More file actions
58 lines (51 loc) · 2.28 KB
/
ForumHighLevelActivitySummary.sql
File metadata and controls
58 lines (51 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/* Get a summary of solutions, new users, active users, new topics created, FAQ views and reply rate by month */
-- [params]
-- string :interval = 1 month
SELECT
/* SOLUTIONS */
(SELECT count(*)
FROM user_actions ua WHERE ua.created_at >= date_trunc('month', CURRENT_DATE - INTERVAL :interval)
AND created_at < date_trunc('month', CURRENT_DATE)
AND action_type = 15 -- Discourse Action Types: https://meta.discourse.org/t/description-of-fields-returned-by-discourse-api/168968
) AS solutions,
/* USERS */
/* NEW USERS */
(SELECT count(*)
FROM users u WHERE u.id > 0
AND created_at >= CURRENT_DATE - INTERVAL :interval
) AS new_users,
/* ACTIVE USERS */
(SELECT count(*)
FROM users u WHERE (u.last_posted_at >= date_trunc('month', CURRENT_DATE - INTERVAL :interval)
AND u.last_posted_at < date_trunc('month', CURRENT_DATE)) -- active user defined as somebody who posted at least one
) AS active_users,
/* TOPICS */
/* NEW TOPICS */
(SELECT count(*)
FROM topics t WHERE t.created_at >= date_trunc('month', CURRENT_DATE - INTERVAL :interval)
AND created_at < date_trunc('month', CURRENT_DATE)
AND t.deleted_at IS NULL -- takes into account only existing topics
AND t.user_id NOT IN ('-1', '-2')
) AS new_topics,
/* FAQs*/
/* FAQ Views */
(SELECT SUM(views)
FROM topics t WHERE t.created_at >= date_trunc('month', CURRENT_DATE - INTERVAL :interval)
AND created_at < date_trunc('month', CURRENT_DATE)
AND category_id = 42 -- replace with your FAQ category_id
) AS faq_views,
/* REPLIES */
/* REPLY RATE */
concat(((1 - ((SELECT COUNT(id)
FROM topics WHERE archetype <> 'private_message' -- excluding replies in private DMs
AND deleted_at IS NULL -- takes into account only existing replies
AND posts_count = 1
AND created_at >= date_trunc('month', CURRENT_DATE - INTERVAL :interval)
AND created_at < date_trunc('month', CURRENT_DATE)
)::float /
(SELECT COUNT(id)
FROM topics WHERE archetype <> 'private_message' -- excluding replies in private DMs
AND user_id not in ('-1', '-2')
AND created_at >= date_trunc('month', CURRENT_DATE - INTERVAL :interval)
AND created_at < date_trunc('month', CURRENT_DATE)
))) * 100)::decimal(4,2),'%') AS reply_rate;