Consulta do Explorador de Dados - Cobertura de pessoal

\bOlá a todos,\n\nVocês por acaso sabem a Consulta do Explorador de Dados que ajuda a ver o número e a porcentagem de postagens/tópicos de funcionários dentro de um determinado período?\n\nObrigado por toda a ajuda.

Espero que a consulta a seguir ajude você com isso.

--[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 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
total_posts staff_posts staff_posts %
7400 3108 42.0
4 curtidas

Olá @michebs,

Obrigado por compartilhar isso. Posso perguntar se podemos ter isso aplicado para um grupo específico criado por nós?

Digamos que temos um grupo de funcionários, mas nem todos são moderadores ou administradores, então precisamos criar um novo grupo chamado “Katalon_team”, podemos obter os dados de todas as pessoas nessa equipe Katalon?

Obrigado.

2 curtidas

Ajustei a consulta e adicionei o nome do grupo como um parâmetro de entrada, dessa forma funcionará para qualquer grupo. Espero que ajude.

--[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
6 curtidas

Olá Michelle,

Obrigado pelo SQL atualizado. Tive um problema ao executá-lo, conforme a imagem anexa.

Por favor, me informe como posso resolver isso. Obrigado.

1 curtida

Este erro parece estar ligado à ausência do último SELECT, linha 27.

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

Isso faz sentido?

2 curtidas

Sim, desculpe o meu erro, muito obrigado pela sua ajuda.

2 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.