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