Aggiungi nome utente a due query

Ciao, ho deciso di aprire un nuovo argomento per questo:

Utenti di alta qualità negli ultimi sei mesi

Per quanto riguarda gli “Utenti di alta qualità negli ultimi sei mesi”, ho utilizzato la seconda versione della query.

Ho aggiunto il nome utente e un parametro :limit.

-- [params]
-- int :limit = 20
SELECT 
    sum(p.score) / count(p) as "punteggio medio per post", 
    count(p.id) as post_count, 
    -- p.user_id, 
    u.username
FROM posts p
JOIN users u ON u.id = p.user_id
WHERE p.created_at >= CURRENT_DATE - INTERVAL '6 month'
  AND NOT u.admin
  AND u.active
GROUP by user_id, u.views, u.username
HAVING count(p.id) > 50
ORDER BY sum(p.score) / count(p) DESC
LIMIT :limit

I 50 maggiori contributori

Per la query dei “50 maggiori contributori”, ho utilizzato questa versione, aggiungendo un parametro per il limite e il nome utente richiesto.

-- [params]
-- int :months_ago = 1
-- int :limit = 50
WITH query_period AS (
SELECT
date_trunc('month', CURRENT_DATE) - INTERVAL ':months_ago months' as period_start,
date_trunc('month', CURRENT_DATE) - INTERVAL ':months_ago months' + INTERVAL '1 month' - INTERVAL '1 second' as period_end
),

user_posts_in_period AS (
SELECT
p.user_id, u.username
FROM users u, posts p
INNER JOIN query_period qp
ON p.created_at >= qp.period_start
AND p.created_at <= qp.period_end
WHERE p.user_id > 0
AND u.id = p.user_id
)

SELECT
up.username,
-- up.user_id,
count(1) as post_count
FROM user_posts_in_period up
GROUP BY up.user_id, up.username
ORDER BY post_count DESC
LIMIT :limit

Fammi sapere se funziona come desideri.

Cordiali saluti

Grazie mille @SidV, è esattamente quello che mi serviva! :grinning: