تقرير لوحة التحكم - أبرز المستخدمين حسب الإعجابات التي تلقوها من أشخاص مختلفين

هذا هو إصدار SQL لتقرير لوحة المعلومات للمستخدمين الأعلى حسب الإعجابات المستلمة من مجموعة متنوعة من الأشخاص.

يوضح تقرير لوحة المعلومات هذا المستخدمين الأعلى الذين تلقوا إعجابات من مجموعة واسعة من مستخدمي موقع ما، خلال نطاق تاريخ محدد. تم تصميم الاستعلام لمعرفة المستخدمين الذين تلقوا أكبر عدد من الإعجابات على منشوراتهم، حيث يمثل كل عدد إعجابات عدد المستخدمين الفريدين الذين أعجبوا بمنشوراتهم.

--[params]
--date :start_date = 2024-01-01
--date :end_date = 2025-01-01

SELECT
    p.user_id,
    u.username,
    COUNT(DISTINCT ua.user_id) AS likes
FROM
    user_actions ua
    INNER JOIN posts p ON p.id = ua.target_post_id
    INNER JOIN users u ON p.user_id = u.id
WHERE
    ua.created_at::date BETWEEN :start_date AND :end_date
    AND ua.action_type = 1
    AND p.user_id > 0
GROUP BY
    p.user_id,
    u.username
ORDER BY
    likes DESC

شرح استعلام SQL

  • معلمات التاريخ:
    • يقبل الاستعلام معلمتين، :start_date و :end_date، اللتين تحددان نطاق التاريخ للتقرير. تقبل كلتا معلمتي التاريخ تنسيق التاريخ YYYY-MM-DD.
  • الاختيار: الأعمدة الرئيسية المحددة للإخراج هي:
    • p.user_id: معرف المستخدم الخاص بالناشر.
    • u.username: اسم المستخدم المقابل.
    • likes: عدد معرفات المستخدمين المميزة (ua.user_id) التي “أعجبت” بالمنشورات، مما يضمن حساب الإعجابات الفريدة لكل مستخدم.
  • الربط (Joins): هناك ربطان داخليان:
    • user_actions ua مع posts p: يطابق الإجراءات مع منشوراتها المقابلة.
    • posts p مع users u: يربط المنشورات بمؤلفيها، مما يسهل استرداد معلومات المستخدم.
  • التصفية:
    • يطبق شرط WHERE عدة عوامل تصفية:
      • ua.created_at::date BETWEEN :start_date AND :end_date يحد الإجراءات التي تم النظر فيها لتلك التي تقع ضمن المعلمات.
      • ua.action_type = 1 يعزل إجراءات “الإعجاب” عن أنواع أخرى من إجراءات المستخدم.
      • p.user_id > 0 يستبعد أي إعجابات مرتبطة بمستخدمين غير مسجلين (مثل المستخدمين النظاميين أو المجهولين).
  • التجميع:
    • يتم تجميع مجموعة النتائج حسب p.user_id و u.username. هذا يضمن تجميع الإعجابات لكل مستخدم واسم المستخدم المقابل.
  • الترتيب:
    • يتم ترتيب النتائج حسب عدد الإعجابات (likes DESC)، مما يقدم المستخدمين الأكثر تقديرًا أولاً.

نتائج مثال

user username likes
user1 user1 100
user2 user2 90
user3 user3 80
3 إعجابات