هذا هو إصدار 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 |
| … | … | … |