تسجيلات المستخدمين الجدد شهريًا مع المجموع التراكمي

المشكلة

لأغراض إعداد التقارير، نحتاج إلى معرفة عدد المستخدمين الذين سجلوا، ولكن مجمعة في فترات زمنية مفيدة (فئات).

نحتاج أيضًا إلى معرفة العدد الإجمالي للمستخدمين في نفس فئات التاريخ.

الحل

يعمل الاستعلام التالي عن طريق إنشاء تعبير جدول مشترك (CTE) حيث يتم تحويل العمود user.created_at إلى سلسلة نصية للسنة والشهر وعدد المستخدمين في “فئة” الشهر هذه.

ثم يتم استخدام عملية نافذة (OVER) لإنشاء مجموع تراكمي لـ count.

WITH data as (
    SELECT
        TO_CHAR(u.created_at,'yyyy-MM') AS yeardate,
        COUNT(*)
    FROM users u
    GROUP BY yeardate
    ORDER BY yeardate
)
SELECT
    yeardate,
    count,
    SUM(count::int) OVER (
        order by yeardate asc rows between unbounded preceding and current row
    ) AS cumulative
FROM data

تم نسخ تعويذة OVER من Stack Overflow، لذا لا توجد فكرة عما إذا كانت جميع تلك الخيارات مطلوبة بشكل صارم.

سيكون من السهل تغيير حجم فئات التاريخ عن طريق تغيير كيفية تنسيق yeardate.

لدينا بعض العناصر المشابهة في هذا الموضوع إذا كنت ترغب في تجربتها ومقارنتها:

إعجاب واحد (1)

أوه رائع! شكراً.

اعتقدت أنني بحثت، من الواضح ليس بما فيه الكفاية أو ليس بالصلصة السرية الكافية.

هذا كان سيوفر علي بعض الوقت … تنهد

إعجابَين (2)