Query Esplora Dati - Copertura del personale

Ciao a tutti,

Sapete per caso la query di Data Explorer che aiuta a vedere il numero e la percentuale di post/argomenti dello staff entro un certo periodo di tempo?

Grazie per tutto l’aiuto.

Spero che la seguente query ti aiuti.

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

Ciao @michebs,

Grazie per aver condiviso questo. Posso chiedere se possiamo applicarlo a un gruppo specifico creato da noi?

Supponiamo di avere un gruppo di personale ma non tutti sono moderatori o amministratori, quindi dobbiamo creare un nuovo gruppo chiamato “Katalon_team”, possiamo ottenere i dati di tutte le persone in quel team Katalon?

Grazie.

Ho modificato la query e aggiunto il nome del gruppo come parametro di input, in questo modo funzionerà per qualsiasi gruppo. Spero sia d’aiuto.

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

Ciao Michelle,

Grazie per l’SQL aggiornato. Ho riscontrato un problema durante l’esecuzione, come mostrato nell’immagine allegata.

Per favore, consigliami come potrei risolvere questo problema. Grazie.

Questo errore sembra essere collegato all’assenza dell’ultimo SELECT, riga 27.

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

Ha senso?

Sì, scusa il mio errore, grazie mille per il tuo aiuto.