هذا هو إصدار SQL من تقرير لوحة المعلومات لنسبة الإبلاغ عن المستخدمين.
يقوم تقرير لوحة المعلومات هذا بإنشاء قائمة بالمستخدمين مرتبة حسب نسبة ردود الموظفين على بلاغاتهم (الموافقة وعدم الموافقة). يتضمن التقرير معلومات حول نشاط الإبلاغ لكل مستخدم، مع التركيز بشكل خاص على عدد البلاغات التي تمت الموافقة عليها أو عدم الموافقة عليها أو تجاهلها من قبل المشرفين، بالإضافة إلى درجة محسوبة تمثل أداء المستخدم في الإبلاغ.
يعد التقرير مفيدًا للمسؤولين لتحديد المستخدمين الذين يبلغون بدقة عن المحتوى غير المناسب، وقياس مشاركة المستخدم في الإشراف المجتمعي، وتقديم ملاحظات حول ممارسات الإبلاغ، وتقييم أداء المستخدم في الإبلاغ لأدوار المشرف المحتملة.
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-02-01
SELECT
u.id AS user_id,
u.username,
CASE
WHEN u.silenced_till IS NOT NULL THEN 't'
ELSE 'f'
END AS silenced,
SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END)::numeric AS disagreed_flags,
SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric AS agreed_flags,
SUM(CASE WHEN rs.status = 3 THEN 1 ELSE 0 END)::numeric AS ignored_flags,
(
CASE
WHEN SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END)::numeric = 0 THEN
SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric * SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric
ELSE
ROUND(
(1 - (SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric / SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END))) *
(SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END) - SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric)
)
END
) AS score
FROM
users AS u
INNER JOIN reviewable_scores AS rs ON rs.user_id = u.id
WHERE
u.id > 0
AND rs.created_at >= :start_date
AND rs.created_at <= :end_date
GROUP BY
u.id,
u.username,
u.uploaded_avatar_id,
u.silenced_till
ORDER BY
score DESC
LIMIT 100
شرح استعلام SQL
فيما يلي تفصيل للاستعلام:
- المعلمات: يقبل الاستعلام معلمتين،
:start_dateو:end_date، مما يسمح للمستخدم بتحديد النطاق الزمني للتقرير. تقبل كلتا معلمتي التاريخ تنسيق التاريخYYYY-MM-DD. - عبارة SELECT: يحدد الاستعلام الأعمدة التالية:
user_id: المعرف الفريد للمستخدم.username: اسم المستخدم.silenced: قيمة منطقية تشير إلى ما إذا كان المستخدم قد تم إسكاته حاليًا.disagreed_flags: العدد الإجمالي لبلاغات المستخدم التي لم يوافق عليها المشرفون.agreed_flags: العدد الإجمالي لبلاغات المستخدم التي وافق عليها المشرفون.ignored_flags: العدد الإجمالي لبلاغات المستخدم التي تجاهلها المشرفون.score: درجة محسوبة تمثل أداء المستخدم في الإبلاغ.
- عبارة FROM: يربط الاستعلام جدول
usersبجدولreviewable_scoresعلىuser_idللحصول على معلومات الإبلاغ المتعلقة بكل مستخدم. - عبارة WHERE: يقوم الاستعلام بتصفية البيانات لتشمل فقط السجلات للمستخدمين الذين لديهم
idأكبر من 0 وحيث يكون تاريخcreated_atلدرجات المراجعة ضمن النطاق الزمني المحدد. - عبارة GROUP BY: يقوم الاستعلام بتجميع النتائج حسب
user_idوusernameوuploaded_avatar_idوsilenced_tillلتجميع بيانات الإبلاغ لكل مستخدم. - عبارة ORDER BY: يقوم الاستعلام بترتيب النتائج حسب
scoreالمحسوب بترتيب تنازلي لإظهار المستخدمين ذوي أعلى أداء في الإبلاغ أولاً. - عبارة LIMIT: يحد الاستعلام النتائج بأعلى 100 مستخدم بناءً على الدرجة المحسوبة.
نتائج مثال
| user | username | silenced | disagreed_flags | agreed_flags | ignored_flags | score |
|---|---|---|---|---|---|---|
| user_1_id | user_1 | f | 0.0 | 10.0 | 3.0 | 100.0 |
| user_2_id | user_2 | f | 0.0 | 6.0 | 3.0 | 36.0 |
| user_3_id | user_3 | f | 0.0 | 4.0 | 0.0 | 16.0 |
| … | … | … | … | … | … | … |