חלק גדול מהכוח של מאגרי מידע יחסיים נובע מסינון נתונים ומחיבור טבלאות יחד. זו הסיבה שאנחנו מייצגים את היחסים הללו מלכתחילה. אך מערכות מסדי נתונים מודרניות מספקות טכניקה חשובה נוספת: קיבוץ.

קיבוץ מאפשר לך לחלץ מידע סיכום ממסד נתונים. זה מאפשר לך לשלב תוצאות כדי ליצור נתונים סטטיסטיים שימושיים. קיבוץ חוסך ממך כתיבת קוד למקרים נפוצים כגון רישומי דמויות ממוצעים. וזה יכול לייצר מערכות יעילות יותר.

מה עושה סעיף GROUP BY?

GROUP BY, כפי שהשם מרמז, מקבץ את התוצאות לסט קטן יותר. התוצאות מורכבות משורה אחת לכל ערך מובחן בעמודה המקובצת. אנו יכולים להראות את השימוש בו על ידי התבוננות בכמה נתוני דוגמה עם שורות שחולקות כמה ערכים נפוצים.

להלן מאגר מידע פשוט מאוד עם שתי טבלאות המייצגות אלבומי רשומות. אתה יכול להגדיר מסד נתונים כזה על ידי כתיבת סכמה בסיסית עבור מערכת מסדי הנתונים שבחרת. ה אלבומים בטבלה יש תשע שורות עם מפתח ראשי תְעוּדַת זֶהוּת טור ועמודות לשם, אמן, שנת יציאה ומכירות:

++++++
| מזהה | שם | אומן_יד | שחרור_שנה | מכירות |
++++++
| 1 | דרך המנזר | 1 | 1969 | 14 |
| 2 | הצד האפל של הירח | 2 | 1973 | 24 |
instagram viewer

| 3 | שמועות | 3 | 1977 | 28 |
| 4 | לעולם לא | 4 | 1991 | 17 |
| 5 | בעלי חיים | 2 | 1977 | 6 |
| 6 | להתראות דרך לבנים צהובות | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | עטלף מהגיהנום | 7 | 1977 | 28 |
++++++

ה אמנים השולחן הוא אפילו פשוט יותר. יש לו שבע שורות עם עמודות מזהה ושמות:

+++
| מזהה | שם |
+++
| 1 | הביטלס |
| 2 | פינק פלויד |
| 3 | פליטווד מק |
| 4 | נירוונה |
| 5 | אלטון ג'ון |
| 6 | אדל |
| 7 | כיכר בשר |
+++

אתה יכול להבין היבטים שונים של GROUP BY בעזרת מערך נתונים פשוט כזה. כמובן, מערך נתונים אמיתי יכלול הרבה יותר שורות רבות, אך העקרונות נשארים זהים.

קיבוץ לפי עמודה אחת

נניח שאנחנו רוצים לגלות כמה אלבומים יש לנו לכל אמן. התחל עם טיפוסי בחר שאילתה להביא את העמודה artist_id:

בחר אומן_יד FROM אלבומים

פעולה זו מחזירה את כל תשע השורות כצפוי:

++
| אומן_יד |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
++

כדי לקבץ את התוצאות הללו על ידי האמן, הוסף את הביטוי GROUP BY artist_id:

בחר artist_id מתוך אלבומים GROUP BY artist_id

מה שמביא את התוצאות הבאות:

++
| אומן_יד |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
++

בקבוצת התוצאות יש שבע שורות, שהופחתו מתשע בסך הכל אלבומים שולחן. כל אחד מהם ייחודי אומן_יד יש שורה אחת. לבסוף, כדי לקבל את הספירות בפועל, הוסף לספור(*) לעמודות שנבחרו:

בחר artist_id, COUNT (*)
מאלבומים
GROUP BY artist_id
+++
| אומן_יד | ספירה (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++

התוצאות מקבצות שני זוגות שורות לאמנים עם מזהים 2 ו 6. לכל אחד מהם שני אלבומים במסד הנתונים שלנו.

קָשׁוּר: גיליון הצ'יטים החיוני של פקודות SQL למתחילים

כיצד לגשת לנתונים מקובצים באמצעות פונקציה מצטברת

ייתכן שהשתמשת ב- לספור לתפקד לפני, במיוחד ב לספור(*) צורה כפי שנראה לעיל. זה מביא את מספר התוצאות בערכה. אתה יכול להשתמש בו כדי לקבל את המספר הכולל של רשומות בטבלה:

בחר מספר (*) מתוך אלבומים
++
| ספירה (*) |
++
| 9 |
++

COUNT היא פונקציה מצטברת. מונח זה מתייחס לפונקציות המתרגמות ערכים ממספר שורות לערך יחיד. הם משמשים לעתים קרובות יחד עם הצהרת GROUP BY.

במקום לספור רק את מספר השורות, אנו יכולים להחיל פונקציה מצטברת על ערכים מקובצים:

בחר אמן_יד, SUM (מכירות)
מאלבומים
GROUP BY artist_id
+++
| אומן_יד | SUM (מכירות) |
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++

סך המכירות שהוצגו לעיל עבור אמנים 2 ו -6 הם מכירות האלבומים המרובות שלהם בשילוב:

בחר אמן_יד, מכירות
מאלבומים
WHERE artist_id IN (2, 6)
+++
| אומן_יד | מכירות |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++

קיבוץ לפי עמודות מרובות

ניתן לקבץ לפי יותר מעמודה אחת. כלול רק עמודות או ביטויים מרובים, מופרדים באמצעות פסיקים. התוצאות יתקבצו על פי שילוב העמודות הללו.

בחר SELECT release_year, sales, count (*)
מאלבומים
GROUP BY release_year, מכירות

בדרך כלל זה יניב יותר תוצאות מאשר קיבוץ לפי עמודה אחת:

++++
| שחרור_שנה | מכירות | ספירה (*) |
++++
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
++++

שים לב, בדוגמה הקטנה שלנו, לשני אלבומים בלבד יש אותה שנת יציאה ומספר מכירות זהה (28 בשנת 1977).

פונקציות צבירות שימושיות

מלבד COUNT, כמה פונקציות עובדות היטב עם GROUP. כל פונקציה מחזירה ערך המבוסס על הרשומות השייכות לכל קבוצת תוצאות.

  • COUNT () מחזיר את המספר הכולל של רשומות תואמות.
  • SUM () מחזירה את סך כל הערכים בעמודה הנתונה שנוספה.
  • MIN () מחזיר את הערך הקטן ביותר בעמודה נתונה.
  • MAX () מחזיר את הערך הגדול ביותר בעמודה נתונה.
  • AVG () מחזיר את הממוצע הממוצע. זה שווה ערך ל- SUM () / COUNT ().

אתה יכול גם להשתמש בפונקציות אלה ללא סעיף GROUP:

בחר AVG (מכירות) מתוך אלבומים
++
| AVG (מכירות) |
++
| 19.1111 |
++

שימוש ב- GROUP BY עם סעיף WHERE

בדיוק כמו עם SELECT רגיל, אתה עדיין יכול להשתמש ב- WHERE כדי לסנן את קבוצת התוצאות:

בחר artist_id, COUNT (*)
מאלבומים
היכן שחרור_שנה> 1990
GROUP BY artist_id
+++
| אומן_יד | ספירה (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++

עכשיו יש לך רק את האלבומים האלה שיצאו אחרי 1990, מקובצים לפי אמנים. אתה יכול גם להשתמש בצירוף עם סעיף WHERE, ללא תלות ב- GROUP BY:

בחר אל.שם, COUNT (*) אלבומי AS
מתוך אלבומים l, אמנים r
איפה artist_id = r.id
AND release_year> 1990
GROUP BY artist_id
+++
| שם | אלבומים |
+++
| נירוונה | 1 |
| אדל | 2 |
+++

שים לב, עם זאת, אם אתה מנסה לסנן על בסיס עמודה מצטברת:

בחר אל.שם, COUNT (*) אלבומי AS
מתוך אלבומים l, אמנים r
איפה artist_id = r.id
AND אלבומים> 2
GROUP BY artist_id;

תופיע שגיאה:

שגיאה 1054 (42S22): טור לא ידוע 'אלבומים' ב 'איפה סעיף'

עמודות המבוססות על נתונים מצטברים אינן זמינות לסעיף WHERE.

שימוש בסעיף HAVING

אז איך מסננים את קבוצת התוצאות לאחר שהתקבצה? ה לאחר סעיף עוסק בצורך זה:

בחר אל.שם, COUNT (*) אלבומי AS
מתוך אלבומים l, אמנים r
איפה artist_id = r.id
GROUP BY artist_id
בעל אלבומים> 1;

שים לב כי סעיף ה- HAVING מגיע אחרי GROUP BY. אחרת, זה בעצם החלפה פשוטה של ​​ה- WHERE עם HAVING. התוצאות הן:

+++
| שם | אלבומים |
+++
| פינק פלויד | 2 |
| אדל | 2 |
+++

אתה עדיין יכול להשתמש בתנאי WHERE לסינון התוצאות לפני הקיבוץ. זה יעבוד יחד עם סעיף HAVING לסינון לאחר הקיבוץ:

בחר אל.שם, COUNT (*) אלבומי AS
מתוך אלבומים l, אמנים r
איפה artist_id = r.id
AND release_year> 1990
GROUP BY artist_id
בעל אלבומים> 1;

רק אמן אחד במסד הנתונים שלנו הוציא יותר מאלבום אחד אחרי 1990:

+++
| שם | אלבומים |
+++
| אדל | 2 |
+++

שילוב תוצאות עם GROUP BY

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

ברגע שאתה מבין קיבוץ וכיצד להצטרף למספר טבלאות, תוכל לנצל את מרבית הכוח של מסד נתונים יחסי.

אימייל
כיצד לשאול מספר טבלאות מסדי נתונים בו זמנית עם הצטרפות SQL

למד כיצד להשתמש בצירופי SQL כדי לייעל שאילתות, לחסוך זמן ולגרום לך להרגיש כמו משתמש כוח SQL.

נושאים קשורים
  • תִכנוּת
  • SQL
על הסופר
בובי ג'ק (28 מאמרים פורסמו)

בובי הוא חובב טכנולוגיה שעבד כמפתח תוכנה במשך רוב שני העשורים. הוא נלהב ממשחקים, עובד כעורך ביקורות במגזין Switch Player, והוא שקוע בכל ההיבטים של פרסום מקוון ופיתוח אתרים.

עוד מבובי ג'ק

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

צעד אחד נוסף !!!

אנא אשר את כתובת הדוא"ל שלך בדוא"ל ששלחנו לך זה עתה.

.