كيفية الحصول على عدد مرات ذكر المجموعات خلال العام الماضي وعدد أعضائها

مرحبًا، أنا مشرف في منتدى Hopscotch، وأود الاستفسار عما إذا كان بإمكاننا طلب المساعدة في استعلامات Data Explorer التالية:

  • عدد الإشارات (@) التي تلقاها المجموعات خلال الـ 365 يومًا الماضية
    • مرتبة من الأقل إلى الأعلى،
    • مع استبعاد المجموعات التي لم تكن موجودة لأكثر من 365 يومًا (أي أن تاريخ إنشاء المجموعة أقدم من 365 يومًا)
  • عدد الإشارات (@) التي تلقاها المجموعات خلال الـ 365 يومًا الماضية
    • مع استبعاد المجموعات التي لديها 5 إشارات أو أكثر خلال الـ 365 يومًا الماضية
    • مرتبة من الأقل إلى الأعلى،
    • مع استبعاد المجموعات التي لم تكن موجودة لأكثر من 365 يومًا (أي أن تاريخ إنشاء المجموعة أقدم من 365 يومًا)
  • عدد الأعضاء في المجموعات،
    • مع استبعاد المجموعات التي لديها 10 أعضاء أو أكثر
    • مرتبة من الأقل إلى الأعلى

الهدف هو العمل على إزالة المجموعات غير النشطة. (سأقوم بإرسال هذه الاستعلامات إلى مسؤول لإنشائها)

شكرًا مقدمًا،
تريسي

(أود إضافة وسم data-explorer لكن يبدو أنني لا أستطيع فعل ذلك في الوقت الحالي)

مرحباً،

فقط للتوضيح، هل تحتاج إلى ثلاثة استعلامات؟

  1. بالنسبة لجميع المجموعات التي يزيد عمرها عن 365 يوماً، اذكر عدد الإشارات التي حصلت عليها، بترتيب تصاعدي.
  2. بالنسبة لجميع المجموعات التي يزيد عمرها عن 365 يوماً، اذكر عدد الإشارات التي حصلت عليها، بترتيب تصاعدي، فقط إذا كانت الإشارات أقل من خمس.
  3. بالنسبة لجميع المجموعات التي يقل عدد أعضائها عن 10، اذكر عدد الأعضاء فيها.

إذا كان الأمر كذلك، يمكنني مساعدتك في ذلك - فكل المعلومات التي تحتاجها مخزنة في جداول المجموعات، ومستخدمي المجموعات، وإشارات المجموعات.

بقدر ما أستطيع استنتاجه، لا يقوم نظام Discourse بتتبع الإشارات بشكل صريح، لكنه يتتبع الروابط المضافة إلى المواضيع. سيتم تسجيل إشارة إلى مجموعة في منشور كقيمة للحقل url في جدول topic_links بالشكل التالي: "/groups/<group_name>". يجب أن يعطيك الاستعلام التالي نتائج قريبة مما تبحث عنه. ستحتاج إلى تزويد القيم لمعلمات start_date و end_date. يجب أن تكون هذه التواريخ بالصيغة yyyy-mm-dd. على سبيل المثال، للحصول على بيانات للسنة الماضية، أدخل 2020-01-01 كقيمة لـ start_date و 2020-12-31 كقيمة لـ end_date:

--[params]
-- date :start_date
-- date :end_date

WITH group_mentions AS (
SELECT
split_part(url, '/', 3) AS group_name
FROM topic_links tl
JOIN topics t ON t.id = tl.topic_id
WHERE internal = true
AND url LIKE '/groups/%'
AND t.deleted_at IS NULL
AND t.archetype = 'regular'
AND tl.created_at::date BETWEEN :start_date AND :end_date
)

SELECT
gm.group_name,
COUNT(gm.group_name) AS mention_count
FROM group_mentions gm
JOIN groups g ON g.name = gm.group_name
WHERE g.created_at::date <= :start_date
GROUP BY gm.group_name
ORDER BY mention_count DESC

الاستعلام يعيد فقط الإشارات المضافة إلى المنشورات العادية (مع أنه يشمل الإشارات المضافة إلى منشورات الهمس). إذا كنت ترغب في تضمين الإشارات المضافة إلى الرسائل الشخصية في النتائج، فاحذف السطر AND t.archetype = 'regular' من الاستعلام الأول.

أخبرني إذا لم يكن هذا يعيد نوع البيانات الذي تبحث عنه. سأحاول الإجابة على أسئلتك الأخرى غدًا إذا لم يجب عليها أحد قبل ذلك.