Skip to content

دوال التجميع في SQL مشروحة

دوال التجميع في SQL، وGROUP BY، وHAVING، والتجميعات المميزة والمتقدمة، مع قيم الإرجاع وأمثلة من سطر واحد على جدول الطلبات.

دوال التجميع تدمج صفوفًا كثيرة في نتيجة قياسية واحدة. تُقسّم GROUP BY الصفوف حسب المفتاح قبل التجميع، وتُصفّي HAVING المجموعات بعد التجميع. تُتخطى قيم NULL المدخلة في كل دالة تجميع عدا COUNT(*).

جدول مرجعي · 29 إدخالات
29 of 29 rows
قياسية
عدد قيم الإدخال غير NULL؛ وتعدّ COUNT(*) جميع الصفوف.SELECT COUNT(*) FROM orders
مجموع القيم الرقمية غير NULL. تُرجع NULL عند مجموعة فارغة.SELECT SUM(total) FROM orders
المتوسط الحسابي للقيم الرقمية غير NULL، مع تجاهل قيم NULL المدخلة.SELECT AVG(total) FROM orders
أصغر قيمة غير NULL عبر أي نوع قابل للمقارنة.SELECT MIN(total) FROM orders
أكبر قيمة غير NULL عبر أي نوع قابل للمقارنة.SELECT MAX(total) FROM orders
مُجمَّعة
تقسّم صفوف الإدخال حسب المفتاح؛ تعمل دوال التجميع على كل قسم على حدة.SELECT user_id, SUM(total) FROM orders GROUP BY user_id
شرط يُقيَّم لكل مجموعة بعد التجميع، ويحل محل WHERE مع الدوال التجميعية.SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
عدة تجميعات تُحسب لكل مجموعة في مسار واحد.SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
تحسب عدة تجميعات في عبارة واحدة؛ ترجع المفاتيح خارج المجموعة الحالية قيمة NULL.SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
اختصار لمجموعات تجميع هرمية؛ يضيف مجاميع جزئية ومجموعًا نهائيًا.SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
اختصار لكل تركيبة من المفاتيح المذكورة كمجموعات تجميع.SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
تمزج مفاتيح تجميع عادية مع مجموعات تجميع في عبارة واحدة.SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
تُبقي أول صف لكل مفتاح بحسب الترتيب. امتداد خاص بـ Postgres.SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
المميزة والمتقدمة
عدد القيم الفريدة غير NULL، مع إزالة التكرار أولًا.SELECT COUNT(DISTINCT user_id) FROM orders
تُقدّر عدد القيم المميزة بهامش خطأ محدود؛ مصممة للمدخلات الكبيرة.SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
تدمج السلاسل النصية غير NULL بفاصل.SELECT STRING_AGG(user_id::text, ',') FROM orders
تدمج السلاسل النصية غير NULL؛ وهي اسم STRING_AGG في MySQL.SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
تجمع قيم الإدخال غير NULL في مصفوفة.SELECT ARRAY_AGG(total) FROM orders
تجمع صفوف الإدخال في مصفوفة JSON؛ وصيغة JSONB تخزّنها ثنائيةً مُفسَّرة.SELECT JSONB_AGG(user_id) FROM orders
ترجع TRUE عندما تكون كل / أي قيمة مدخلة غير NULL صحيحة.SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
الاسم القياسي البديل لـ BOOL_AND.SELECT EVERY(total > 0) FROM orders
مئين بالاستيفاء / بأقرب رتبة فوق المدخل المرتّب؛ يتطلب WITHIN GROUP.SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
القيمة الأكثر تكرارًا في المدخلات؛ دالة تجميع لمجموعة مرتّبة في Postgres.SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
تمرّر ترتيب الفرز إلى دوال تجميع المجموعات المرتّبة والافتراضية.SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
تقصر دالة التجميع على الصفوف التي تحقق الشرط.SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
ترتّب القيم قبل أن تدمجها أو تجمعها دالة التجميع.SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
تعدّ COUNT(*) وCOUNT(1) كل صف؛ أما COUNT(col) فتتخطى قيم NULL.SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
الانحراف المعياري للعيّنة من القيم الرقمية غير NULL. تعطي STDDEV_POP صيغة المجتمع، ويختلف الافتراضي للاسم المجرد حسب المحرك.SELECT STDDEV(total) FROM orders
تباين العيّنة من القيم الرقمية غير NULL (مربع STDDEV). يسمان VAR_SAMP وVAR_POP كل صيغة.SELECT VARIANCE(total) FROM orders