إضافة اسم المستخدم إلى استعلامين

مرحباً، لقد قررت فتح موضوع جديد لهذا:

أفضل المستخدمين جودة في الأشهر الستة الماضية

بالنسبة لـ “أفضل المستخدمين جودة في الأشهر الستة الماضية”، استخدمت النسخة الثانية من الاستعلام.

وقمت بإضافة اسم المستخدم؛ ومعامل :limit.

-- [params]
-- int :limit = 20
SELECT 
    sum(p.score) / count(p) as "average score 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

أفضل 50 ناشراً

بالنسبة لاستعلام “أفضل 50 ناشراً”، استخدمت هذه النسخة، وقمت بإضافة معامل للحد، واسم المستخدم الذي تحتاجه.

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

أخبرني إذا كان هذا يعمل كما تريد.

مع خالص التحية

شكرًا جزيلاً لك @SidV، هذا بالضبط ما كنت أحتاجه! :grinning: