التجميع حسب عدة أعمدة وتعبيرات
مفاتيح التجميع المركبة والتجميع حسب القيم المحسوبة
التجميع حسب عدة أعمدة وتعبيرات درس مجاني في SQL Interview Prep على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.
ما بعد مفتاح تجميع واحد
نادرًا ما تعتمد التقارير الواقعية على التجميع حسب عمود واحد. يصعّد المحاورون السؤال من «المبيعات لكل منطقة» إلى «المبيعات لكل منطقة ولكل شهر» لمعرفة ما إذا كنت تفهم مفاتيح التجميع المركبة.
وتتوسع القاعدة ببساطة: تؤدي إضافة مزيد من الأعمدة إلى GROUP BY إلى إنشاء صف واحد لكل تركيبة مميزة من تلك الأعمدة.
ماذا تعني الأعمدة المتعددة؟
عند كتابة GROUP BY region, product، يكون مفتاح المجموعة هو الزوج (region, product). ويصبح كل زوج فريد صفًا واحدًا في الناتج.
- تنتج 5 مناطق و4 منتجات ما يصل إلى 20 مجموعة.
- لا تنتج التركيبات التي لم تظهر مطلقًا أي صف.
- لا يغيّر ترتيب الأعمدة في GROUP BY مجموعة النتائج، وإنما قد يغيّر خطة التنفيذ أحيانًا.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY region, product;التزم بقاعدة SELECT أيضًا
لا يخف القيد الأساسي. يجب أن يظهر كل عمود غير تجميعي في SELECT ضمن GROUP BY. ومع المفاتيح المركبة، ما عليك سوى إدراجها جميعًا.
يُعد نسيان أحد الأعمدة في مجموعة متعددة المفاتيح أكثر الأخطاء شيوعًا تحت ضغط المقابلة. طابق قائمة GROUP BY مع أعمدة SELECT غير التجميعية مطابقة تامة.
-- Both region and product appear in GROUP BY
SELECT region, product,
COUNT(*) AS orders,
AVG(amount) AS avg_amount
FROM sales
GROUP BY region, product;التجميع حسب تعبير
يمكنك التجميع حسب قيمة محسوبة، وليس حسب عمود خام فقط. ومن الطلبات الشائعة التجميع حسب الشهر، ما يعني التجميع حسب تاريخ مبتور أو مستخرج.
يجب أن يطابق التعبير في GROUP BY التعبير في SELECT. إذ يجمع المحرك حسب النتيجة المحسوبة.
SELECT DATE_TRUNC('month', order_date) AS month,
SUM(amount) AS monthly_total
FROM sales
GROUP BY DATE_TRUNC('month', order_date);التجميع باستخدام مجموعات CASE
من الأنماط القوية التجميع حسب تعبير CASE لإنشاء فئات مخصصة. وبهذه الطريقة تُنتج ملخصات «طلبات صغيرة / متوسطة / كبيرة» من دون جدول بحث.
يحب المحاورون هذا النوع من الأسئلة لأنه يختبر منطق CASE والتجميع حسب قيمة مشتقة في الوقت نفسه.
SELECT CASE
WHEN amount < 50 THEN 'small'
WHEN amount < 200 THEN 'medium'
ELSE 'large'
END AS bucket,
COUNT(*) AS orders
FROM sales
GROUP BY CASE
WHEN amount < 50 THEN 'small'
WHEN amount < 200 THEN 'medium'
ELSE 'large'
END;التجميع حسب موضع العمود
تسمح كثير من اللهجات بالتجميع حسب الموضع الترتيبي: تعني GROUP BY 1, 2 العمودين الأول والثاني في SELECT. وهذا أسلوب موجز لكنه هش.
قد يقبله المحاورون، لكن انتبه إلى المخاطر: تؤدي إعادة ترتيب قائمة SELECT إلى تغيير التجميع بصمت. فضّل التعبيرات الصريحة في تعليمات برمجية مخصصة للإنتاج.
-- 1 = month expression, 2 = region
SELECT DATE_TRUNC('month', order_date) AS month,
region, SUM(amount)
FROM sales
GROUP BY 1, 2;تشكل قيم NULL مجموعتها الخاصة
إليك فخًا متعلقًا بالتعامل مع NULL داخل التجميع: عندما يحتوي عمود التجميع على قيم NULL، تندمج جميع الصفوف التي تحتوي على NULL في مجموعة واحدة.
يختلف هذا عن مقارنات المساواة، حيث لا تساوي NULL قيمة NULL أخرى مطلقًا. أما لأغراض التجميع، فتُعامل قيم NULL على أنها «متساوية» وتشكل فئة واحدة. ويحب المحاورون هذا التناقض الظاهري.
-- Rows with region IS NULL all land in one group
SELECT region, COUNT(*) AS orders
FROM sales
GROUP BY region;استخدام GROUPING SETS لمستويات متعددة
لإنتاج عدة درجات من التفصيل التجميعي في استعلام واحد، استخدم GROUPING SETS. فهي تحسب كل مجموعة مفاتيح مدرجة وتضم النتائج معًا.
وهذا مؤشر على مستوى متوسط إلى متقدم: فبدلًا من ثلاثة استعلامات منفصلة مع UNION، يعيد تصريح واحد الإجماليات لكل منطقة، ولكل منتج، والإجمالي الكلي معًا.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS ((region), (product), ());ROLLUP وCUBE
إن ROLLUP وCUBE اختصاران لمجموعات التجميع الشائعة. توفر ROLLUP(region, product) التجميع حسب المنطقة والمنتج، والإجماليات الفرعية لكل منطقة، والإجمالي الكلي، ما يجعلها مثالية للتقارير الهرمية.
تُنشئ CUBE كل تركيبة ممكنة من الأعمدة المدرجة. ويميز فهم هذه الأدوات المرشح الذي سبق له إنشاء استعلامات تقارير واقعية.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP (region, product);مثال تطبيقي: تقرير المناطق الشهري
اجمع الأفكار معًا: احسب إجمالي ومتوسط المبيعات لكل منطقة ولكل شهر، للطلبات المكتملة فقط، ثم رتّبها لتسهيل القراءة.
تضيّق WHERE نطاق الصفوف أولًا، ثم يجمع مفتاح التجميع المركب حسب المنطقة وتعبير الشهر، بينما يرتب ORDER BY الناتج. وهذه إجابة نموذجية كاملة في مقابلة محلل بيانات.
SELECT region,
DATE_TRUNC('month', order_date) AS month,
SUM(amount) AS total,
AVG(amount) AS avg_order
FROM sales
WHERE status = 'completed'
GROUP BY region, DATE_TRUNC('month', order_date)
ORDER BY region, month;كيفية شرح طريقة التفكير بصوت عالٍ
عند مواجهة أي سؤال عن التجميع المركب، اذكر المفتاح صراحة: «أجمع حسب تركيبة X وY، ولذلك أحصل على صف واحد لكل زوج مميز (X, Y)».
ثم تأكد من وجود كل عمود غير تجميعي في SELECT ضمن هذا المفتاح، واذكر أن قيم NULL تندمج في مجموعة واحدة. وهذا الشرح المنهجي هو ما تقدّره المقابلات على المستوى المتوسط.
تحقق سريع
فكّر في مفاتيح التجميع المركبة.
خلاصة
المفاتيح المركبة: يؤدي إدراج عدة أعمدة إلى إنتاج صف واحد لكل تركيبة مميزة؛ ويجب أن يكون كل عمود غير تجميعي في SELECT جزءًا من المفتاح.
- يمكنك التجميع حسب التعبيرات أو فئات CASE أو المواضع الترتيبية، علمًا بأن المواضع هشة.
- تندمج قيم NULL في عمود التجميع في مجموعة واحدة.
- تنتج
GROUPING SETSوROLLUPوCUBEمستويات تجميع متعددة في استعلام واحد. - ادفع مرشحات الصفوف إلى WHERE قبل التجميع.
الأسئلة الشائعة
هل درس «التجميع حسب عدة أعمدة وتعبيرات» مجاني؟
نعم — نص درس «التجميع حسب عدة أعمدة وتعبيرات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.
ماذا ستتعلم في «التجميع حسب عدة أعمدة وتعبيرات»؟
مفاتيح التجميع المركبة والتجميع حسب القيم المحسوبة تتمرن على SQL Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Interview Prep؟
لا تُشترط خبرة سابقة. SQL Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التجميع حسب عدة أعمدة وتعبيرات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Interview Prep هذا؟
نعم. كل درس في SQL Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- قاعدة GROUP BY لأعمدة SELECT
- HAVING مقابل WHERE
- التجميع حسب عدة أعمدة وتعبيرات
- عد المجموعات وتصفيتها