0Pricing
SQL Academy · درس

تعبيرات CASE واستعلامات Pivot

استخدم CASE WHEN داخل التجميعات لتحويل الجداول الطويلة إلى تقارير تقاطعية عريضة.

تعبيرات CASE واستعلامات Pivot درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

CASE: صيغة If/Else المضمنة في SQL

‏CASE هي صيغة ternary في SQL. ولها شكلان:

-- Searched CASE
CASE WHEN x > 0 THEN 'positive'
     WHEN x < 0 THEN 'negative'
     ELSE 'zero' END

-- Simple CASE
CASE status
  WHEN 'A' THEN 'active'
  WHEN 'P' THEN 'pending'
  ELSE 'unknown'
END

CASE في SELECT

احسب عموداً مشتقاً:

SELECT id, total,
       CASE
         WHEN total >= 1000 THEN 'whale'
         WHEN total >=  100 THEN 'regular'
         ELSE 'small'
       END AS bucket
FROM orders;

CASE في WHERE وORDER BY

تصفية وترتيب مخصصان:

-- Custom sort:
ORDER BY
  CASE WHEN status = 'urgent' THEN 0 ELSE 1 END,
  created_at DESC;

-- Conditional filter:
WHERE CASE WHEN $1 = 'paid' THEN status = 'paid'
           ELSE status IN ('pending','paid')
      END;

CASE داخل دوال التجميع: عمليات عد شرطية

حيلة التحويل المحوري الكلاسيكية:

SELECT user_id,
       COUNT(*) AS total,
       SUM(CASE WHEN status = 'paid'      THEN 1 ELSE 0 END) AS paid,
       SUM(CASE WHEN status = 'pending'   THEN 1 ELSE 0 END) AS pending,
       SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled
FROM orders
GROUP BY user_id;

FILTER: بديل أوضح

تكون عبارة FILTER في PostgreSQL أكثر وضوحاً:

SELECT user_id,
       COUNT(*)                                     AS total,
       COUNT(*) FILTER (WHERE status = 'paid')      AS paid,
       COUNT(*) FILTER (WHERE status = 'pending')   AS pending,
       COUNT(*) FILTER (WHERE status = 'cancelled') AS cancelled
FROM orders
GROUP BY user_id;

تحويل الأشهر إلى أعمدة

حوّل التنسيق الطولي إلى تنسيق عريض باستخدام CASE + دالة تجميع:

SELECT year,
       SUM(CASE WHEN month =  1 THEN revenue END) AS jan,
       SUM(CASE WHEN month =  2 THEN revenue END) AS feb,
       -- ...
       SUM(CASE WHEN month = 12 THEN revenue END) AS dec
FROM monthly_revenue
GROUP BY year
ORDER BY year;

تحويل الفئات إلى أعمدة

صف واحد لكل مستخدم، وعمود واحد لكل حالة:

SELECT user_id,
       SUM(total) FILTER (WHERE status = 'paid')      AS paid_total,
       SUM(total) FILTER (WHERE status = 'pending')   AS pending_total
FROM orders GROUP BY user_id;

قيود التحويلات المحورية باستخدام CASE

يجب أن تعرف الأعمدة المستهدفة عند كتابة الاستعلام. أما التحويلات المحورية الديناميكية، فأنشئ SQL في التطبيق أو استخدم PL/pgSQL الإجرائي.

CASE مقابل COALESCE / NULLIF

COALESCE = "أول قيمة غير NULL". NULLIF = "NULL إذا تساوت القيمتان". أما CASE فهي أكثر عمومية — فاستخدمها عندما لا تناسب COALESCE/NULLIF.

توافق الأنواع

يجب أن تُرجع جميع فروع CASE أنواعاً متوافقة. حوّل الأنواع صراحةً عند خلط أنواع مختلفة:

SELECT CASE WHEN x THEN 1::TEXT ELSE 'no' END;

CASE متداخل

تفرّع متعدد المستويات:

SELECT CASE
  WHEN amount IS NULL THEN 'no payment'
  WHEN amount = 0     THEN 'free'
  WHEN amount < 10    THEN 'cheap'
  ELSE
    CASE WHEN paid_at IS NULL THEN 'overdue' ELSE 'paid' END
END AS status FROM invoices;

خلاصة

‏CASE هي صيغة "if/else" العامة في SQL.

  • أعمدة محسوبة في SELECT
  • تحويلات محورية باستخدام CASE داخل دالة تجميع أو FILTER
  • منطق مخصص في WHERE / ORDER BY

تحقق سريع

أي عبارة هي الأكثر وضوحاً للتجميع الشرطي في PostgreSQL؟

الأسئلة الشائعة

هل درس «تعبيرات CASE واستعلامات Pivot» مجاني؟

نعم — نص درس «تعبيرات CASE واستعلامات Pivot» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «تعبيرات CASE واستعلامات Pivot»؟

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

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تعبيرات CASE واستعلامات Pivot»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. UNION وINTERSECT وEXCEPT
  2. UNION ALL مقابل UNION (تكلفة إزالة التكرارات)
  3. تعبيرات CASE واستعلامات Pivot
  4. أنماط Crosstab (PostgreSQL crosstab())
← العودة إلى SQL Academy