توابع تجمیعی SQL، GROUP BY، HAVING و تجمیعهای متمایز/پیشرفته، همراه با مقادیر بازگشتی و مثالهای تکخطی روی جدول orders.
توابع تجمیعی چند سطر را به یک نتیجهٔ اسکالر فشرده میکنند. GROUP BY سطرها را پیش از تجمیع بر اساس کلید پارتیشنبندی میکند. HAVING گروهها را پس از تجمیع فیلتر میکند. ورودیهای NULL توسط همهٔ توابع تجمیعی به جز COUNT(*) نادیده گرفته میشوند.
جدول مرجع · 29 مورد
توابع تجمیعی SQLExplained
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 را میچسباند؛ نام MySQL برای STRING_AGG.
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 هر شکل را مشخص میکنند.