تعليمات استعلام SQL - تسجيل اختبارات الاختيار من متعدد

StackOverflow https://stackoverflow.com/questions/22417

  •  09-06-2019
  •  | 
  •  

سؤال

لنفترض أن لدي جدول الطالب، فهو يحتوي على معرف int.لدي مجموعة ثابتة من 10 أسئلة متعددة الاختيارات مع 5 إجابات محتملة.لدي جدول إجابات عادي يحتوي على معرف السؤال وStudent.answer (1-5) وStudent.ID

أحاول كتابة استعلام واحد يُرجع جميع الدرجات على نسبة مئوية معينة.ولتحقيق هذه الغاية، قمت بكتابة UDF بسيط يقبل إجابات الطالب والإجابة الصحيحة، بحيث يحتوي على 20 معلمة.

لقد بدأت أتساءل عما إذا كان من الأفضل إلغاء تسوية جدول الإجابات وإدخاله في تطبيقي والسماح لطلبي بإجراء التسجيل.

أي شخص من أي وقت مضى التعامل مع شيء من هذا القبيل ولديه البصيرة؟

هل كانت مفيدة؟

المحلول

إذا فهمت مخططك وسؤالك بشكل صحيح، فماذا عن شيء مثل هذا:

select student_name, score
from students
  join (select student_answers.student_id, count(*) as score
        from student_answers, answer_key
        group by student_id
        where student_answers.question_id = answer_key.question_id
          and student_answers.answer = answer_key.answer)
  as student_scores on students.student_id = student_scores.student_id
where score >= 7
order by score, student_name

وينبغي أن يتم اختيار الطلاب الحاصلين على درجة 7 أو أكثر، على سبيل المثال.ما عليك سوى ضبط جملة المكان لأغراضك.

نصائح أخرى

ربما سأترك الأمر لطلبك لإجراء التسجيل.الدفع ربما التطبيع ليس طبيعيا بواسطة جيف أتوود.

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

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

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

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

يعتبر عدم التطبيع بشكل عام هو الملاذ الأخير.تبدو المشكلة مشابهة جدًا لتطبيقات المسح، وهي شائعة جدًا.بدون رؤية نموذج البيانات الخاص بك، من الصعب اقتراح حل، لكنني سأقول أنه ممكن بالتأكيد.أتساءل لماذا تحتاج إلى 20 معلمة لهذه الوظيفة؟

سيكون الحل القائم على المجموعة العلائقية أبسط وأسرع في معظم الحالات.

يجب أن يكون هذا الاستعلام سهلاً للغاية ...على افتراض أن لديك الإجابة الصحيحة المخزنة في جدول الأسئلة.لديك الإجابة الصحيحة مخزنة في جدول الأسئلة، أليس كذلك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top