استخدام CASE في SQL: شرح عملي مع أمثلة على الاستعلامات وتحليل البيانات

دقائق القراءة: 5

ما هي جملة CASE في SQL؟

تُعد جملة CASE في SQL من أهم الأدوات التي تتيح لك إرجاع قيمة مختلفة بناءً على شرط أو مجموعة من الشروط داخل الاستعلام. ويمكن النظر إليها على أنها بديل قريب من جملة if أو switch في لغات البرمجة الأخرى، لكنها مصممة للعمل داخل قواعد البيانات والاستعلامات.

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

شرح جملة CASE في SQL واستخدامها في تحليل البيانات والاستعلامات الشرطية

صياغة جملة CASE في SQL

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

CASE
  WHEN condition1 THEN value1
  WHEN condition2 THEN value2
  ELSE default_value
END

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

ماذا تفعل كل كلمة مفتاحية؟

  • CASE: تبدأ المنطق الشرطي.
  • WHEN: تحدد الشرط المطلوب اختباره.
  • THEN: تحدد القيمة الناتجة إذا تحقق الشرط.
  • ELSE: قيمة بديلة عند عدم تحقق أي شرط.
  • END: تنهي الجملة الشرطية.

مثال عملي: تحويل درجات الطلاب إلى تقديرات

لنفترض أن لدينا جدولاً باسم students_grades يحتوي على أسماء الطلاب ودرجاتهم في اختبار. المطلوب هو إنشاء عمود جديد باسم grade لتحديد التقدير المناسب لكل طالب بناءً على قيمة score.

id name score
1 Simisola 60
2 Ivan 80
3 Metodija 52
4 Callum 98
5 Leia 84
6 Aparecida 82
7 Ursula 69
8 Ramazan 78
9 Corona 87
10 Alise 57
11 Galadriel 89
12 Merel 99
13 Cherice 55
14 Nithya 81
15 Elşad 71
16 Liisi 90
17 Johanna 90
18 Anfisa 90
19 Ryōsuke 97
20 Sakchai 61
21 Elbert 63
22 Katelyn 51

بناء جملة CASE للتقديرات

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

CASE
  WHEN score >= 94 THEN "A"
  WHEN score >= 90 THEN "A-"
  WHEN score >= 87 THEN "B+"
  WHEN score >= 83 THEN "B"
  WHEN score >= 80 THEN "B-"
  WHEN score >= 77 THEN "C+"
  WHEN score >= 73 THEN "C"
  WHEN score >= 70 THEN "C-"
  WHEN score >= 67 THEN "D+"
  WHEN score >= 60 THEN "D"
  ELSE "F"
END

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

إضافة التقدير داخل استعلام SELECT

بعد إعداد المنطق الشرطي، يمكن دمجه مباشرة داخل الاستعلام وإنشاء عمود جديد باستخدام AS.

SELECT *,
  CASE
    WHEN score >= 94 THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END AS grade
FROM students_grades;

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

id name score grade
1 Simisola 60 D
2 Ivan 80 B-
3 Metodija 52 F
4 Callum 98 A
5 Leia 84 B
6 Aparecida 82 B-
7 Ursula 69 D+
8 Ramazan 78 C+
9 Corona 87 B+
10 Alise 57 F
11 Galadriel 89 B+
12 Merel 99 A
13 Cherice 55 F
14 Nithya 81 B-
15 Elşad 71 C-
16 Liisi 90 A-
17 Johanna 90 A-
18 Anfisa 90 A-
19 Ryōsuke 97 A
20 Sakchai 61 D
21 Elbert 63 D
22 Katelyn 51 F

أمثلة أكثر تقدماً على استخدام CASE في SQL

لا يقتصر دور CASE على التصنيف فقط، بل يمكن دمجه مع أوامر أخرى مثل ORDER BY وGROUP BY وCOUNT() للوصول إلى تحليلات أكثر قيمة.

المثال الأول: ترتيب النتائج من الأعلى إلى الأدنى

إذا أردت عرض الطلاب أصحاب الدرجات الأعلى أولاً، يمكنك استخدام ORDER BY مع العمود score بدلاً من grade. والسبب أن الترتيب الأبجدي للتقديرات لا يعكس ترتيبها الفعلي.

SELECT name,
  CASE
    WHEN score >= 94 THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END AS grade
FROM students_grades
ORDER BY score DESC;

تؤدي الكلمة DESC إلى عرض القيم تنازلياً، أي تبدأ بأعلى درجة ثم الأقل.

name grade
Merel A
Callum A
Ryōsuke A
Liisi A-
Johanna A-
Anfisa A-
Galadriel B+
Corona B+
Leia B
Aparecida B-
Nithya B-
Ivan B-
Ramazan C+
Elşad C-
Ursula D+
Elbert D
Sakchai D
Simisola D
Alise F
Cherice F
Metodija F
Katelyn F

المثال الثاني: حساب عدد الطلاب في كل تقدير

يمكنك استخدام GROUP BY مع COUNT(*) لمعرفة توزيع الطلاب على التقديرات المختلفة. هذا النوع من التحليل مفيد جداً في قراءة نتائج الاختبارات بسرعة.

SELECT
  CASE
    WHEN score >= 94 THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END AS grade,
  COUNT(*) AS number_of_students
FROM students_grades
GROUP BY grade
ORDER BY grade DESC;

ملاحظة تقنية مهمة: في بعض أنظمة قواعد البيانات قد لا يكون ORDER BY score DESC مناسباً بعد التجميع إذا لم يكن score موجوداً في ناتج التجميع. لذلك قد تحتاج إلى ترتيب مخصص للتقديرات أو إعادة بناء منطق الترتيب بطريقة أكثر توافقاً مع نظام قاعدة البيانات المستخدم.

grade number_of_students
A 3
A- 3
B+ 2
B 1
B- 3
C+ 1
C- 1
D+ 1
D 3
F 4

المثال الثالث: تحليل النجاح والرسوب

يمكن توظيف CASE أيضاً في التحليل المبسط عبر تحويل الدرجات إلى نتيجتين فقط: passed وfailed. هذا النموذج ممتاز لبناء مؤشرات أداء سريعة.

SELECT
  CASE
    WHEN score >= 60 THEN "passed"
    ELSE "failed"
  END AS result,
  COUNT(*) AS number_of_students
FROM students_grades
GROUP BY result
ORDER BY result DESC;

النتيجة النهائية تُظهر أن عدد الطلاب الناجحين هو 18 من أصل 22، بينما رسب 4 طلاب. هذا يعطينا انطباعاً عاماً جيداً عن أداء الصف، مع الحاجة إلى دعم إضافي للطلاب ذوي النتائج المنخفضة.

result number_of_students
passed 18
failed 4

أفضل الممارسات عند استخدام CASE في الاستعلامات

  • رتّب الشروط من الأكثر تحديداً أو الأعلى قيمة إلى الأقل، خاصة عند التعامل مع نطاقات رقمية.
  • استخدم ELSE دائماً لتجنب القيم غير المتوقعة أو NULL غير المقصود.
  • امنح العمود الناتج اسماً واضحاً باستخدام AS مثل grade أو result.
  • عند التحليل، ادمج CASE مع GROUP BY وCOUNT() للحصول على رؤى عملية وسريعة.
  • انتبه إلى اختلاف سلوك بعض محركات قواعد البيانات في ORDER BY بعد عمليات التجميع.

متى تكون جملة CASE مفيدة فعلاً؟

تظهر قوة CASE عندما تحتاج إلى تحويل البيانات الخام إلى معلومات مفهومة. ومن أشهر الاستخدامات:

  • تصنيف العملاء حسب الإنفاق أو النشاط.
  • تحديد حالة الطلبات مثل completed أو pending.
  • بناء تقارير الأداء والمبيعات.
  • تحويل القيم الرقمية إلى أوصاف نصية واضحة.
  • تنفيذ منطق تحليلي دون تغيير بنية الجدول الأصلي.

الخلاصة التقنية

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *