مرحباً، أنا مبتدئ تماماً في SQL.\n\nأريد الحصول على قائمة بـ "عدد المستخدمين" الذين قاموا بـ "عدد الأصوات". في حالتنا، لدينا حد أقصى 10 أصوات لكل شخص. ستبدو الجداول الناتجة كالتالي:\n\n| عدد الأصوات | عدد المستخدمين |\n|–|–|\n|10 | 25 |\n|9| 32 |\n| 8 | 43|\n| (إلخ) | |\n\nفي أول استعلام SQL لي على الإطلاق، هذا ما توصلت إليه:\n\n\nsql\nSELECT user_id, count(user_id)\nFROM discourse_voting_votes\nGROUP BY user_id\nORDER BY count DESC\n\nهذا ينتج قائمة بالمستخدمين مرتبة حسب عدد الأصوات التي تم الإدلاء بها. على الأقل بهذا يمكنني حساب النتيجة المطلوبة يدوياً، لكنه ممل وعرضة للأخطاء.
أخشى أن يكون هذا هو استعلام SQL الأول لي أيضًا، لذا سنرى كيف يسير هذا…
ولكن هل يساعد هذا في أي شيء؟
WITH votes AS (
SELECT user_id, count(user_id) as Number_of_Votes
FROM discourse_voting_votes dvv
WHERE dvv.archive = false
GROUP BY user_id
ORDER BY Number_of_Votes DESC
)
SELECT Number_of_Votes, count(*) AS Number_of_Users
FROM votes
GROUP BY Number_of_Votes
ORDER BY Number_of_Votes DESC
ممتاز! شكراً جزيلاً! على النص البرمجي والدرس الصغير في SQL. آمل أن يكون هذا مفيدًا لك أيضًا.
أراهن أن هذا الاستعلام سيكون مفيدًا للآخرين. في حالتنا، نريد إظهار توزيع الأصوات هذا حتى يكون المتطوعون لدينا أكثر وعياً بكيفية استخدامهم لأصواتهم مقارنة بأقرانهم. الهدف النهائي هو زيادة عدد الأصوات المستخدمة.
يسعدني حقًا أنه نجح.
لقد كنت أرغب في التدرب على مستكشف البيانات لفترة من الوقت وبدا هذا فرصة مثالية، لذلك في الواقع، يجب أن أشكرك أنا. ![]()
لقد أضفت سطر ‘archive = false’ لتقييد النتائج بإجمالي عدد الأصوات الحالي للمستخدم، وعدم تضمين الأصوات التاريخية. أعتقد أن هذا صحيح لحالتك، ولكن قم بإزالته إذا كنت تريد “إجماليًا شاملاً”.
شكراً مرة أخرى. ![]()
![]()
آه، لم أكن أعرف ما هذا. نعم، هذا يتناسب مع الاستعلام الذي كنت أبحث عنه. شكراً لك مرة أخرى، نحن نستخدم هذه البيانات بالفعل.
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.