Skip to content

פונקציות אגרגציה ב־SQL עם הסברים

פונקציות האגרגציה של SQL, GROUP BY, HAVING ואגרגטים מיוחדים/מתקדמים, ממופות לערכי ההחזרה שלהן ולדוגמאות של שורה אחת על טבלת orders.

פונקציות אגרגציה מצמצמות שורות רבות לתוצאה סקלרית אחת. 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; השם של 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 נותנים שם לכל צורה.SELECT VARIANCE(total) FROM orders