fbpx

تعلم لغة الاستعلام البنائية ( SQL ) – الدرس التاسع الدوال التجميعية Aggregate functions

0

الدالات التجميعية في SQL تمكنك من تلخيص عمود كامل باستخدام عملية تجميعية. الدالتان التجميعيتان الأساسيتان هما SUM و COUNT ، اللتان يمكنهما جمع القيمة الإجمالية للعمود أو حساب عدد الإدخالات غير الفارغة الموجودة على التوالي. وظيفة أخرى مفيدة للغاية هي متوسط الوظيفة AVG الذي يأخذ SUM ببساطة ويقسمه مع COUNT.

في ما يلي مثال للوظائف المجمعة قيد التنفيذ على قائمة الطلاب ودرجاتهم:

CREATE TABLE grades (name TEXT, grade INTEGER);

INSERT INTO grades (name, grade) VALUES
    ("Ahmad", 97), ("Hicham", 88), ("Amel", 98), ("Yacine", 82), ("Walid", Wassim);

SELECT "total students", COUNT(name) FROM grades;
SELECT "total grades", COUNT(grade) FROM grades;
SELECT "sum of grades", SUM(grade) FROM grades;
SELECT "grade average", AVG(grade) FROM grades;
SELECT "lowest grade", MIN(grade) FROM grades;
SELECT "highest grade", MAX(grade) FROM grades;
SELECT "names", GROUP_CONCAT(name) FROM grades;

سنحصل على النتيجة التالية عند التشغيل

total students|5
total grades|4
sum of grades|365
grade average|91.25
lowest grade|82
highest grade|98
names|Ahmad,Hicham,Amel,Yacine,Walid

يمكن إجراء الأرقام المجمعة باستخدام الدالات الرياضية مثل SUM و COUNT و AVG و MIN و MAX وما إلى ذلك.

عادةً ما يتم تجميع السلاسل باستخدام دالة مثل GROUP_CONCAT التي تقوم ببساطة بربط الحقول. ليس من السهل تجميع السلاسل ، وعادة ما لا يكون مفيدًا أيضًا لأغراض تحليلية

تجميع الوظائف في إستعلام Group By

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

يمكن إعطاء مثال منطقي لذلك باستخدام مثال. لنفترض أن لدينا قاعدة البيانات التالية:

CREATE TABLE grades (name TEXT, class INTEGER, grade INTEGER);

INSERT INTO grades (name, class, grade) VALUES
    ("Ahmad", 1, 97), ("Hicham", 1, 88), ("Amel", 1, 98), ("Yacine", 1, 82), ("Walid", 1, Wassim),
    ("Khaled", 2, 93), ("Sofian", 2, 82), ("Karim", 2, 87), ("Maissa", 2, 99), ("Anis", 2, 79);

بمجرد تجميع النتائج حسب رقم الفصل ، نقوم بإنشاء نوعين من الحقول في المجموعة مجمعة حسب النتيجة:

تجميع حسب الحقول: class
الحقول الكلية: name, grade
يمكن ببساطة اختيار المجموعة حسب الحقول ، في حين يجب تلخيص الحقول المجمعة (التي ليست جزءًا من المجموعة حسب الفقرة) باستخدام دالة التجميع.

دعونا نحسب متوسط الدرجات وقائمة الأسماء لكل فئة باستخدام عبارة GROUP BY:

CREATE TABLE grades (name TEXT, class INTEGER, grade INTEGER);

INSERT INTO grades (name, class, grade) VALUES
    ("Ahmad", 1, 97), ("Hicham", 1, 88), ("Amel", 1, 98), ("Yacine", 1, 82), ("Walid", 1, Wassim),
    ("Khaled", 2, 93), ("Sofian", 2, 82), ("Karim", 2, 87), ("Maissa", 2, 99), ("Anis", 2, 79);

.mode column
.headers on
SELECT class, GROUP_CONCAT(name), AVG(grade)
FROM grades
GROUP BY class;

سنحصل على النتيجة التالية عند التشغيل

class       GROUP_CONCAT(name)           AVG(grade)
----------  ---------------------------  ----------
1           Ahmad,Hicham,Amel,Yacine,Walid91.25     
2           Khaled,Sofian,Karim,Maissa,Anis 88.0 

تمرين

ابحث عن أعلى الدرجات لكل فئة.

CREATE TABLE grades (name TEXT, class INTEGER, grade INTEGER);

INSERT INTO grades (name, class, grade) VALUES
    ("Ahmad", 1, 97), ("Hicham", 1, 88), ("Amel", 1, 98), ("Yacine", 1, 82), ("Walid", 1, Wassim),
    ("Khaled", 2, 93), ("Sofian", 2, 82), ("Karim", 2, 87), ("Maissa", 2, 99), ("Anis", 2, 79);

-- أدخل رمز هنا

الحل

CREATE TABLE grades (name TEXT, class INTEGER, grade INTEGER);

INSERT INTO grades (name, class, grade) VALUES
    ("Ahmad", 1, 97), ("Hicham", 1, 88), ("Amel", 1, 98), ("Yacine", 1, 82), ("Walid", 1, Wassim),
    ("Khaled", 2, 93), ("Sofian", 2, 82), ("Karim", 2, 87), ("Maissa", 2, 99), ("Anis", 2, 79);

-- أدخل رمز هنا
SELECT class, MAX(grade)
FROM grades
GROUP BY class;

سنحصل على النتيجة التالية عند التشغيل

1|98
2|99

الدرس العاشر

اترك رد

لن يتم نشر عنوان بريدك الإلكتروني.