تحويل الصفوف إلى أعمدة
جزء من قسم ما وراء الأساسيات في رحلة SQL على Coddy — الدرس 14 من 27.
اجمع بين التجميع الشرطي و GROUP BY لتحويل الصفوف إلى أعمدة. إنها نسخة SQL من عملية الـ pivot في جداول البيانات.
افترض أن sales يحتوي على صفوف مثل (month, product, units). لعرض صف واحد لكل شهر مع عمود واحد لكل منتج:
SELECT
month,
SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b
FROM sales
GROUP BY monthإن مجموعة GROUP BY التي يراها كل SUM(CASE …) هي الصفوف الخاصة بشهر واحد؛ بينما يختار CASE الشريحة لمنتج واحد.
التحدي
سهلالجداول والأعمدة المتاحة:
<strong>sales</strong>:<strong>month</strong>,<strong>product</strong>,<strong>units</strong>
قم بتحويل البيانات (Pivot) بحيث يمثل كل صف month واحداً بالأعمدة التالية:
monthapples: إجمالي الـunitsللمنتج'apples'في ذلك الشهرbananas: نفس الشيء لـ'bananas'cherries: نفس الشيء لـ'cherries'total: إجمالي الـunitsلجميع المنتجات في ذلك الشهر
أرجع فقط الأشهر التي يكون فيها الـ total لا يقل عن 20. رتب النتائج حسب الـ month.
ورقة مرجعية
استخدم التجميع الشرطي (conditional aggregation) مع GROUP BY لتحويل الصفوف إلى أعمدة:
SELECT
month,
SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b,
SUM(units) AS total
FROM sales
GROUP BY month
HAVING SUM(units) >= threshold
ORDER BY monthيقوم كل SUM(CASE …) بجمع الصفوف التي تطابق ذلك المنتج فقط داخل كل مجموعة (bucket) خاصة بـ GROUP BY.
جرّب بنفسك
SELECT month,
-- واحد SUM(CASE ...) لكل product، بالإضافة إلى total
FROM sales
GROUP BY month
-- تصفية الأشهر التي يكون فيها total >= 20
ORDER BY month
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.