الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حساب النسبة المئوية

بدأه الحلفاوي في 1 فبراير 2012 · 10 رد · 2,669 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هل يمكنني من مساعدة في امر يمكنني به في استجلاب كل عدد الطلاب , والناحجين فقط مع النسبة المئوية للنجاح باستخدام امر واحد , اذا لا يمكن ذلك اريد منكم كل الاوامر الممكنه البديله لحل هذه المشكله

خالص تحياتي لكم الاخوة والاخوات الاكارم

#2

السلام عليكم

ممكن تضع تصميم الجداول التي تريد عمل الاستعلام لها و مثال عن نتيجة الاستعلام المتوقعة ؟

#3
Adel Khayata كتب:

السلام عليكم

ممكن تضع تصميم الجداول التي تريد عمل الاستعلام لها و مثال عن نتيجة الاستعلام المتوقعة ؟

اذا كان لديك معرف الطالب(حقل مفتاحي) وحقل المواد الدراسية(حقل مفتاحي) مع بعض الحقول مثل الترتيب والمجموع والسنه الدراسية الى ما هنالك , الذي يفعله برنامجي هو تخزين نتيجة الطالب بادخال معرف الطالب و نتيجة المادة لكل المواد ,وسيؤدي ذلك الى تكرار حقل المجموع و الترتيب بعدد المواد الدراسية هل وضحت فكرة التصميم؟

الاستعلام اريده سجل واحد به عدد كل الطلاب والناجحين فقط مع النسبة المئوية للنجاح

مثلا ً : 100 طالب الناجحين منهم 72 تكون نتيجة الاستعلام

100 , 72 , 72%

بافتراض صحة الامر

Select Count(*) as"AllStudent" ,... as "Successed" ,... as "PercentageResult" from My Table

والمشكله اخي عادل هو انني غير متعمق في طريقة كتابة الاوامر المعقدة

#4

هذا هو الاستعلام:

SELECT 
COUNT(ID) AS AllStudents, 
SUM(CASE student.Pass WHEN 1 THEN 1 ELSE 0 END) AS PassCount,
CAST(SUM(CASE student.Pass WHEN 1 THEN 1 ELSE 0 END)AS FLOAT) / COUNT(ID)* 100,
SUM(CASE WHEN student.Score >=70 THEN 1 ELSE 0 END) AS PassCount2,
CAST(SUM(CASE WHEN student.Score >=70 THEN 1 ELSE 0 END)AS FLOAT) / COUNT(ID)* 100
FROM student

وضعت لك حالتين فيما إذا كان النجاح يتم تمثيله عن طريق حقل من نوع Bit ( True يعني ناجح و False يعني راسب ) و هي حالة أول عمودين في النتيجة و ذلك باستخدام student.Pass

و يمكن أن يكون النجاح متمثلاُ عن طريق علامة ( مثلاً أكبر أو يساوي 70 يعني ناجح و أقل من 70 يعني راسب ) و ذلك باستخدام student.Score

#5
Adel Khayata كتب:

هذا هو الاستعلام:

SELECT 
COUNT(ID) AS AllStudents, 
SUM(CASE student.Pass WHEN 1 THEN 1 ELSE 0 END) AS PassCount,
CAST(SUM(CASE student.Pass WHEN 1 THEN 1 ELSE 0 END)AS FLOAT) / COUNT(ID)* 100,
SUM(CASE WHEN student.Score >=70 THEN 1 ELSE 0 END) AS PassCount2,
CAST(SUM(CASE WHEN student.Score >=70 THEN 1 ELSE 0 END)AS FLOAT) / COUNT(ID)* 100
FROM student

وضعت لك حالتين فيما إذا كان النجاح يتم تمثيله عن طريق حقل من نوع Bit ( True يعني ناجح و False يعني راسب ) و هي حالة أول عمودين في النتيجة و ذلك باستخدام student.Pass

و يمكن أن يكون النجاح متمثلاُ عن طريق علامة ( مثلاً أكبر أو يساوي 70 يعني ناجح و أقل من 70 يعني راسب ) و ذلك باستخدام student.Score

بارك الله فيك يا بروف بوركتم جوزيتم خيرا

#6

السلام عليكم

عودٌ على بدء

آخذا في الاعتبار جدول نتائج الطلاب , كيف يمكنني تقسيم تحصيل الطلاب على اقسام قابلة للتغيير من المستخدم

مثلا

- تقسيم اول : 50 - 60 , 71 - 80 , 81 - 90 , 91 - 100

- تقسيم آخر : 50 - 65 , 66 - 80 , 81 - 95 , 95 <

بحيث ياتي الاستعلام بمجموع الطلاب , اعلى وادنى نسبة لكل مدى على حدة ومن ثم يتبعه بالنسبة المئوية لذلك المدى تحديداً

سيكون هنالك اوامر اخرى ساطرحه في حينه كلما تذكرت , فهل هنالك ثمة مادة في المنتدى تخص مثل هكذا اوامر تزيد من قدرات المستخدم وتقليل حقول التخزين الثابته لتفادي كتابه الاوامر المعقدة

بوركتم و جوزيتم خيرا

تم تعديل هذه المشاركة بواسطة الحلفاوي في 5 فبراير 2012 في 23:59

#7

ممكن مثال عن شكل نتيجة الاستعلام في حالتي التقسيم الأول و الثاني التي طرحتها.

و للفائدة: يرجى وضع محاولاتك و بنحاول تطوير الاستعلام الذي تضعه شيئاً فشيئاً.

#8
Adel Khayata كتب:

ممكن مثال عن شكل نتيجة الاستعلام في حالتي التقسيم الأول و الثاني التي طرحتها.

و للفائدة: يرجى وضع محاولاتك و بنحاول تطوير الاستعلام الذي تضعه شيئاً فشيئاً.

السلام عليكم

سؤالي وضعته على نفس مادة السؤال السابق هب انما ما اسميته انت بالـ Student.Score لدينا 10 طلاب نسبهم تتراوح بين 60 - 70 , 35 طالباص تتراوح نسبة تحصيلهم بين 70 - 80 و 50 طالباً بين 80 - 100

يكون ناتج التقرير هكذا

1- ادنى نسبة , اعلى نسبة , مجموع الطلاب

60 , 70 , 10

70 , 80 , 35

2- المرة الثانيه يكون التقسيم مختلف المدى بحيث تكون نتيجة الاستعلام

60 , 75 , 45

75 , 90 , 34 وهكذا

هل وضحت الفكرة

اشركم للاهتمام

#9

جرب هذا الاستعلام:

SELECT  CASE WHEN Score < 50 THEN 'Score < 50'
             WHEN Score BETWEEN 50 AND 60 THEN 'Score 50-60'
             WHEN Score BETWEEN 60 AND 70 THEN 'Score 60-70'
             WHEN Score BETWEEN 70 AND 80 THEN 'Score 70-80'
             WHEN Score BETWEEN 80 AND 90 THEN 'Score 80-90'
             ELSE 'Score >=90'
        END AS [Score] ,
        COUNT(*) AS [Total Students]
FROM    dbo.student
GROUP BY CASE WHEN Score < 50 THEN 'Score < 50'
              WHEN Score BETWEEN 50 AND 60 THEN 'Score 50-60'
              WHEN Score BETWEEN 60 AND 70 THEN 'Score 60-70'
              WHEN Score BETWEEN 70 AND 80 THEN 'Score 70-80'
              WHEN Score BETWEEN 80 AND 90 THEN 'Score 80-90'
              ELSE 'Score >=90'
         END ;
#10
Adel Khayata كتب:

جرب هذا الاستعلام:

SELECT  CASE WHEN Score < 50 THEN 'Score < 50'
             WHEN Score BETWEEN 50 AND 60 THEN 'Score 50-60'
             WHEN Score BETWEEN 60 AND 70 THEN 'Score 60-70'
             WHEN Score BETWEEN 70 AND 80 THEN 'Score 70-80'
             WHEN Score BETWEEN 80 AND 90 THEN 'Score 80-90'
             ELSE 'Score >=90'
        END AS [Score] ,
        COUNT(*) AS [Total Students]
FROM    dbo.student
GROUP BY CASE WHEN Score < 50 THEN 'Score < 50'
              WHEN Score BETWEEN 50 AND 60 THEN 'Score 50-60'
              WHEN Score BETWEEN 60 AND 70 THEN 'Score 60-70'
              WHEN Score BETWEEN 70 AND 80 THEN 'Score 70-80'
              WHEN Score BETWEEN 80 AND 90 THEN 'Score 80-90'
              ELSE 'Score >=90'
         END ;

لا املك الا ان اقول تبارك الله ...... هو ما اردته الضبط بوركت وجوزيت وزادكم الله علما الهم آمين

سيكون معنا سؤال سيجرنا الى الـ Cursors اعمل الان على صياغته بشكل مفهوم حتى يكون واضح الطرح ان شاء الله فالى ذلك الحين

ملحوظة :

السؤال اللاحق تحديدا قمت بحله عبر حلقات متداخلة ( باستخدام لغة دلفي) ولكن اعتقد ان تطبيقات الداتابيز يجب ان تدار بالكامل ما امكن ذلك من خلال T-SQL او الـPL/SQL وان تكون لغات البرمجة فقط لامرار المعاملات لا لاستجلاب

بيانات خامه من قاعدة البيانات ثم اجراء المعالجات عليها في مستوى الـ Front end ثم استرجاعها...... هذا هو سر الهجمة الشرسة على كنوز اوامر الـT-Sql

اثق في ترحيبكم دائماً وعن تجربه

سلمكم الله

#11

السلام عليكم.

أخي بعد إذنك : ضع السؤال الجديد في موضوع منفصل حتى يسهل تتبع الأسئلة و أجوبتها و لا يحدث تداخل بينهم.

مواضيع مشابهة