По-моему, что-то вроде этого даст вам нужные цифры:
-- [params]
-- date :start_date
-- date :end_date
WITH staff_data AS (
SELECT user_id, true as is_staff
FROM group_users
WHERE group_id = 3
),
month_stats AS (
SELECT
date_trunc('month', p.created_at)::date AS month,
COUNT(*) FILTER (WHERE p.post_number = 1) AS total_topics,
COUNT(*) FILTER (WHERE p.post_number <> 1) AS total_posts,
COUNT(DISTINCT p.user_id) FILTER (WHERE p.post_number <> 1 AND is_staff IS NOT TRUE) AS non_staff_users,
COUNT(*) FILTER (WHERE p.post_number <> 1 AND is_staff IS NOT TRUE) AS non_staff_posts,
COUNT(DISTINCT p.user_id) FILTER (WHERE p.post_number <> 1 AND is_staff) AS staff_users,
COUNT(*) FILTER (WHERE p.post_number <> 1 AND is_staff) AS staff_posts
FROM posts p
LEFT JOIN topics t ON t.id = p.topic_id
LEFT JOIN staff_data s ON p.user_id = s.user_id
WHERE p.created_at::date BETWEEN :start_date AND :end_date
AND t.archetype = 'regular'
AND t.deleted_at IS NULL
AND p.deleted_at IS NULL
AND p.post_type = 1
AND p.user_id > 0
GROUP BY month
)
SELECT
ms.month AS "Месяц",
ms.total_topics AS "Все темы",
ms.total_posts AS "Все сообщения",
ms.non_staff_posts AS "Сообщения от не-сотрудников",
ROUND(ms.non_staff_posts * 100.0 / NULLIF(ms.total_posts, 0),1) || '%' AS "Сообщения от не-сотрудников (% от общего числа)",
ms.non_staff_posts / NULLIF(ms.total_topics, 0) AS "Среднее число сообщений от не-сотрудников на тему",
ms.non_staff_users AS "Не-сотрудники, публиковавшие сообщения",
ms.staff_posts AS "Сообщения от сотрудников",
ROUND(ms.staff_posts * 100.0 / NULLIF(ms.total_posts, 0),1) || '%' AS "Сообщения от сотрудников (% от общего числа)",
ms.staff_posts / NULLIF(ms.total_topics, 0) AS "Среднее число сообщений от сотрудников на тему",
ms.staff_users AS "Сотрудники, публиковавшие сообщения"
FROM month_stats ms
ORDER BY "Месяц"
Это должно дать вам что-то вроде этого:
И немного пояснительного текста для полноты картины: 
Этот запрос предназначен для предоставления ежемесячного статистического сводного отчёта о активности на форуме, с особым акцентом на различие между вкладами «сотрудников» и «не-сотрудников» в заданный период времени. Рассчитываемые метрики включают общее количество созданных тем, все опубликованные сообщения, число уникальных не-сотрудников, публиковавших сообщения, количество и процент сообщений от не-сотрудников, среднее число сообщений от не-сотрудников на тему, а также аналогичные показатели для сотрудников. Информация призвана дать представление об вовлечённости пользователей, генерации контента и уровне участия сотрудников по сравнению с не-сотрудниками в обсуждениях на форуме. Запрос обеспечивает точность, учитывая только «обычные» (не личные сообщения) темы и исключая любые удалённые сообщения или темы, шёпоты/малые сообщения/действия модераторов, а также сообщения от системных пользователей в указанном диапазоне дат.
В данном случае критерием «сотрудника» является его наличие в автоматической группе @staff, которая включает как администраторов, так и модераторов. Однако это можно настроить так, чтобы нацеливаться только на администраторов или даже на пользовательскую группу сотрудников, которые формально не считаются «сотрудниками сайта». Если вы точно хотите исключить модераторов, можно заменить group_id в начале запроса на ‘1’. 
Вот то, что вы искали?