توابع تجمیعی: COUNT، SUM، AVG، MIN، MAX

کل یک ستون را خلاصه کنی و بدانی هر تابع تجمیعی با NULL چه می‌کند.

13 دقیقه مطالعه · 7 سؤال تمرینی · SQL از صفر: پرس‌وجو برای تحلیل داده

خلاصه کردن چند ردیف به یک عدد

تحلیل داده یعنی بیشتر از «دیدن ردیف‌ها»، «خلاصه کردنشان». توابع تجمیعی (aggregate) چند ردیف را به یک مقدار تبدیل می‌کنند:

| تابع | کار | |---|---| | COUNT(*) | تعداد ردیف‌ها | | COUNT(ستون) | تعداد ردیف‌هایی که آن ستون NULL نیست | | COUNT(DISTINCT ستون) | تعداد مقدارهای متمایزِ غیر NULL | | SUM(ستون) | جمع | | AVG(ستون) | میانگین | | MIN(ستون) / MAX(ستون) | کمینه / بیشینه |

SELECT COUNT(*) AS n, AVG(price) AS avg_price, MAX(price) AS max_price
FROM products;

WHERE پیش از تجمیع اجرا می‌شود: SELECT COUNT(*) FROM orders WHERE status = 'paid' فقط سفارش‌های پرداخت‌شده را می‌شمارد.

NULL و تجمیع: COUNT(*) با COUNT(ستون) فرق دارد

همه‌ی توابع تجمیعی (جز COUNT(*)) ردیف‌های NULL را نادیده می‌گیرند:

SELECT COUNT(*), COUNT(city), COUNT(DISTINCT city)
FROM customers;
-- 6, 5, 3

شش مشتری داریم، ولی فقط ۵ نفر شهر دارند (Pouya نه)، و آن ۵ نفر در ۳ شهر متفاوت‌اند (Tehran، Shiraz، Isfahan).

دو تله‌ی رایج دیگر:

  1. تقسیم صحیح: در PostgreSQL و SQLite، 7 / 2 برابر 3 است (هر دو عدد صحیح‌اند). برای حاصل اعشاری یکی را اعشاری کنید: 7 / 2.0 برابر 3.5 است.
  2. ترکیب ستون معمولی با تابع تجمیعی: SELECT name, COUNT(*) FROM customers; خطاست، چون COUNT(*) یک عدد است ولی name شش مقدار دارد. راه‌حلش GROUP BY است (درس بعد).

تمرین‌های این درس را حل کن (رایگان)