SELECT AVG(LENGTH(p.cooked))
FROM posts AS p
JOIN topics AS t ON p.topic_id = t.id
WHERE t.archetype != 'private_message'
估算每次用户访问阅读的帖子数量
我选取了最近 30 天的数据以获得相对较新的估算值。
-- [params]
-- int :from_days_ago = 0
-- int :duration_days = 30
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
)
SELECT AVG(posts_read)
FROM user_visits
JOIN t ON visited_at > t.START AND visited_at < t.END
过去 30 天的用户访问次数
-- [params]
-- int :from_days_ago = 0
-- int :duration_days = 30
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
)
SELECT COUNT(1)
FROM user_visits
JOIN t ON visited_at > t.START AND visited_at < t.END
估算过去 30 天阅读的字符总数
将上述三个数值相乘,我得到了过去 30 天内被阅读的处理后帖子字符数的估算值。
估算非母语用户的数量
由于英语是我们论坛的主要语言,我使用 Google Analytics 确定了浏览器语言设置为非英语的用户比例。
最终估算
然后,我进行了低/中/高估算:假设当前非英语访问者的比例为“常见情况”,将其减半作为低估值,翻倍作为高估值。这得出了 30 天内的低/中/高字符数,再乘以翻译服务每 X 个字符的费率。
SELECT LENGTH(COALESCE(string_agg(posts.cooked, ''),''))
FROM posts
JOIN topics on posts.topic_id = topics.id
WHERE topics.archetype <> 'private_message'