دروس الوحدة (3/4)
المنطق الشرطي: الحالة متى
كل ما رأيناه حتى الآن يستخرج البيانات كما هي. في كثير من الأحيان، على الرغم من ذلك، تريد
تحويلها: تصنيف الرواتب إلى مستويات، ووضع علامة على التعيينات الجديدة
"جونيور"، قم بترجمة رمز رقمي إلى تسمية قابلة للقراءة. معيار SQL
تسمى الأداة الخاصة بذلك CASE WHEN.
بناء الجملة: مصغرة إذا/آخر
CASE
WHEN condition_1 THEN value_1
WHEN condition_2 THEN value_2
...
ELSE default_value
ENDيُقرأ تمامًا مثل if/else if/else بأي لغة: يتم تقييم SQL
الشروط ** بالترتيب ** ويتوقف عند أول صحيح، ويعود
المقابلة value. إذا لم يكن أي شيء صحيحًا، فسيتم إرجاع القيمة ELSE. إذا كنت
احذف ELSE ولا يوجد فرع مطابق، فسيتم إرجاع NULL.
-- Classify employees by salary tier:
SELECT first_name,
last_name,
salary,
CASE
WHEN salary >= 50000 THEN 'Senior'
WHEN salary >= 35000 THEN 'Mid'
ELSE 'Junior'
END AS tier
FROM employees;يعيش CASE ** داخل SELECT**: فهو ينتج عمودًا مثل أي عمود آخر
الدالة، ومن الطبيعي تمامًا منحها اسمًا مستعارًا باستخدام AS (هنا
محمي_INLINE_9).
أين تستخدم CASE
ثلاثة مواضع متكررة:
- في
SELECTلإنشاء أعمدة مشتقة (المثال أعلاه). - في
ORDER BYللفرز "المخصص":SQLORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name; -- Engineering first, then the rest, alphabetically by last name. - الوظائف التجميعية الداخلية إلى "العد المشروط":
هذا النمط —SQL
SELECT COUNT(*) AS total, SUM(CASE WHEN salary >= 50000 THEN 1 ELSE 0 END) AS senior, SUM(CASE WHEN salary < 35000 THEN 1 ELSE 0 END) AS junior FROM employees;SUM(CASE WHEN … THEN 1 ELSE 0 END)— هو الأكثر شيوعًا "العد الشرطي" المستخدم في لوحات المعلومات.
النموذج "المدمج".
يوجد أيضًا متغير أقصر عند مقارنة تعبير واحد ضد القيم الدقيقة:
CASE department_id
WHEN 1 THEN 'Ingegneria'
WHEN 2 THEN 'Vendite'
ELSE 'Altro'
ENDإنه يعادل CASE WHEN department_id = 1 THEN ... WHEN department_id = 2 THEN ... END، ولكنه أكثر إحكاما. إنه يعمل فقط من أجل المساواة التامة: إذا
تحتاج إلى >= أو مقارنة أخرى، عليك العودة إلى الموسعة
شكل.
جربه
لكل موظف، أظهر الاسم الأول (الاسم الأول)، والاسم الأخير (اسم العائلة) وعمود "الطبقة" الذي يكون "ألتو" إذا كان الراتب 50000 على الأقل، وإلا "قياسي". ثلاثة أعمدة، صف واحد لكل موظف.
إظهار التلميح
الشرط هو الراتب >= 50000. تذكر إغلاق الحالة بـ END واستخدام الاسم المستعار "الطبقة".
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
لكل قسم (department_id)، قم بحساب عدد الموظفين الذين لديهم راتب مرتفع (>= 50000) وعدد الموظفين القياسيين (< 50000) باستخدام SUM(CASE...). ثلاثة أعمدة: Department_id، High، Standard. الترتيب حسب Department_id (NULLS LAST).
إظهار التلميح
النمط SUM(CASE WHEN...THN 1 ELSE 0 END) هو العدد الشرطي.
الحل متاح بعد 3 من المحاولات