يتم استخدام جملة SQL GROUP BY لترتيب البيانات المتطابقة في مجموعات بناءً على عمود واحد أو أكثر. يتم استخدامه بشكل شائع مع الوظائف التجميعية مثل COUNT() SUM() AVG() MAX() وMIN() لإجراء العمليات الحسابية على كل مجموعة من البيانات.
مثال: أولا سوف نقوم بذلك يخلق قاعدة بيانات SQL تجريبية وجدول سنستخدم فيه أمر GROUP BY.
استفسار:
SELECT Department SUM(Salary) AS TotalSalary FROM Employees GROUP BY Department;الإخراج:
بناء الجملة:
SELECT column1 aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1 column2;- دالة مجمعة: الوظيفة المستخدمة للتجميع على سبيل المثال. SUM() AVG() COUNT().
- اسم_الجدول: اسم الجدول الذي يتم اختيار البيانات منه.
- حالة: شرط اختياري لتصفية الصفوف قبل التجميع (يستخدم مع WHERE).
- العمود 1 العمود 2: الأعمدة التي يتم تطبيق التجميع عليها.
أمثلة على GROUP BY
لنفترض أن لدينا جدول الطالب. سنقوم بإدراج بعض نماذج البيانات في هذا الجدول ثم نقوم بإجراء العمليات باستخدام GROUP BY لفهم كيفية تجميع الصفوف بناءً على عمود وتجميع البيانات.
المثال 1: التجميع حسب عمود واحد
عندما نقوم بالتجميع حسب عمود واحد، يتم دمج الصفوف التي لها نفس القيمة في هذا العمود. على سبيل المثال، يُظهر التجميع حسب الموضوع عدد الطلاب المسجلين في كل مادة.
استفسار:
شكل كامل
SELECT subject COUNT(*) AS Student_Count FROM Student GROUP BY subject;الإخراج:
توضيح: يظهر كل موضوع مرتين في الجدول، لذا فإن عدد الرياضيات والعلوم باللغة الإنجليزية هو 2.
المثال 2: التجميع حسب أعمدة متعددة
يؤدي استخدام GROUP BY مع أعمدة متعددة إلى تجميع الصفوف التي تشترك في نفس القيم في تلك الأعمدة. على سبيل المثال، سيؤدي التجميع حسب المادة والسنة إلى دمج الصفوف التي تحتوي على نفس زوج المادة والسنة ويمكننا حساب عدد الطلاب الذين يقعون في كل مجموعة.
استفسار:
SELECT subject year COUNT(*) FROM Student GROUP BY subject year;الإخراج:
الاستكشاف: يتم تجميع الطلاب الذين لديهم نفس المادة والسنة معًا. وبما أن كل زوج من المواد والسنوات يحدث مرتين، فإن العدد هو 2 لكل مجموعة.
وجود بند في المجموعة حسب البند
يتم استخدام عبارة HAVING لتصفية النتائج بعد التجميع خاصة عند العمل مع وظائف مجمعة مثل SUM() COUNT() أو AVG(). على عكس WHERE فإنه يطبق الشروط على البيانات المجمعة.
مثال 1: التصفية حسب إجمالي الراتب
في هذا الاستعلام، نقوم بتجميع الموظفين حسب الاسم ونعرض فقط أولئك الذين يزيد إجمالي رواتبهم عن 50000.
SELECT NAME SUM(sal) FROM Emp GROUP BY name HAVING SUM(sal)>50000; الإخراج
توضيح : يظهر في النتيجة فقط الموظفون الذين يتجاوز إجمالي رواتبهم 50000.
المثال 2: التصفية حسب متوسط الراتب
في هذا الاستعلام، نقوم بتجميع الموظفين حسب العمر ونعرض فقط تلك الفئات العمرية التي يزيد متوسط الراتب فيها عن 60000.
SELECT age AVG(sal) AS Average_Salary FROM emp GROUP BY age HAVING AVG(sal) > 60000;الإخراج:
توضيح: يقوم هذا الاستعلام بتجميع الموظفين حسب العمر وحساب متوسط الراتب لكل عمر. يتم عرض فقط تلك الفئات العمرية التي يزيد فيها متوسط الراتب عن 60000.
إنشاء اختبار