Запрос Data Explorer — охват персонала

Всем привет,

Не подскажете, какой запрос в Data Explorer позволяет увидеть количество и процент постов/тем от сотрудников за определённый период?

Спасибо за помощь.

Надеюсь, этот запрос поможет вам.

--[params]
--date  :start_date
--date  :end_date

WITH posts_data AS (
    SELECT 
        COUNT(*) AS total_posts,
        SUM(CASE
            WHEN u.admin = 't' OR u.moderator = 't' THEN 1 
            ELSE 0
        END) AS staff_posts
    FROM posts p
    INNER JOIN users u ON u.id = p.user_id
    WHERE p.post_type = 1
        AND p.deleted_at IS NULL
        AND p.created_at BETWEEN :start_date AND :end_date
        AND p.user_id > 0
)
        
SELECT 
    total_posts, 
    staff_posts,
    ROUND((staff_posts/total_posts::decimal)*100,2) "staff_posts %"
FROM posts_data
total_posts staff_posts staff_posts %
7400 3108 42.0

Привет, @michebs,

Спасибо, что поделились этим. Можно ли применить это к конкретной группе, созданной нами?

Допустим, у нас есть группа сотрудников, но не все из них являются модераторами или администраторами. Мы хотим создать новую группу под названием «Katalon_team». Сможем ли мы получить данные обо всех людях из этой команды Katalon?

Спасибо.

Я скорректировал запрос и добавил имя группы в качестве входного параметра, чтобы он работал для любой группы. Надеюсь, это поможет.

--[params]
--date      :start_date = 2022-01-01
--date      :end_date = 2023-01-01
--string    :group_name = staff

WITH group_filter AS (
    SELECT user_id FROM group_users gu
    JOIN groups g ON g.id = gu.group_id
    WHERE LOWER(g.name) LIKE '%'||:group_name||'%'
),

posts_data AS (
    SELECT 
        COUNT(*) AS total_posts,
        SUM(CASE
            WHEN gf.user_id ISNULL THEN 0
            ELSE 1
        END) AS staff_posts
    FROM posts p
    LEFT JOIN group_filter gf ON gf.user_id = p.user_id
    WHERE p. post_type = 1
        AND p.deleted_at ISNULL
        AND p.created_at BETWEEN :start_date AND :end_date
        AND p.user_id > 0
)
       
SELECT 
    total_posts, 
    staff_posts,
    ROUND((staff_posts/total_posts::decimal)*100,2) "staff_posts %"
FROM posts_data

Привет, Мишель,

Спасибо за обновленный SQL. У меня возникла проблема при его запуске, как показано на прикрепленном изображении.

Подскажите, пожалуйста, как мне это исправить. Спасибо.

Похоже, эта ошибка связана с отсутствием последнего запроса SELECT на строке 27.

SELECT 
    total_posts, 
    staff_posts,
    ROUND((staff_posts/total_posts::decimal)*100,2) "staff_posts %"
FROM posts_data

Имеет ли это смысл?

Да, извините, это моя ошибка. Большое спасибо за вашу помощь.