
OrderID.SUM של הכמויות.Quantity ב-UnitPrice, ומסכמים את המכפלות.AS נותן שם לעמודה. בשם בעברית כותבים לפני המחרוזת את האות N, כדי שהעברית תוצג נכון בלי קשר להגדרות האזור של המחשב.COUNT סופר שורות, SUM מסכם, MIN ו-MAX מחזירים את הקטן והגדול ביותר, ו-AVG מחשב ממוצע.DESC מסדר בסדר יורד.SELECT OrderID, SUM(Quantity * UnitPrice) FROM [Order Details] GROUP BY OrderID, HAVING SUM(Quantity * UnitPrice) > 1000, ORDER BY ... DESC, N'...'.הטקסט המלא של הדקות הראשונות בהרצאה «פקודת Select עם Group By» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום וברוכים הבאים להרצאה על פקודת סלקט עם גרופ ביי. זהו הולך להיות מורכב ומסובך, אל תיבהלו, נעשה את זה פשוט.
זה בעצם החלק הקשה ב-SQL, לרוב לאלו שמתחילים זה מה שקשה. נפתח את ה-SQL Management Studio, נתחבר לשרת, יש כאלו שיהיה להם Localhost, שרת מיקומי, אני מתחבר לשרת מרוחק ועושה קונקט.
יופי, התחברתי לשרת, אני פותח את הדאטאבייס שאני משחק איתו שזה Northwind ונעשה אנחנו רוצים group by נעשה order details פרטי הזמנה יש לנו order details כן צריך להיות הנה order details order details נעשה סלקט ונבחר בעצם את הorder details אנחנו רוצים לעשות group by מה זה group by group by זה לחלק את המוצרים את כל ההזמנות לקבוצות לדוגמה קבוצה לפי מספר
ההזמנה אתם רואים לכל כל הזמנה יש פה בטבלה הזאת בorder details יש הזמנה מספר 248 ויש טבלת orders ששם יש פירוט מה זה 248 248 זה יוסי בכתובת כזאת וכזאת וorder details מפרט מה יש לנו בתוך הקופסה בתוך המשלוח אז הזמנה 248 10248 זאת הקופסה זה המשלוח ליוסי ויש שמה כמה מוצרים מוצר 11 כך וכך יחידות שלו בכזה מחיר באותה באותה קופסה
באותה הזמנה גם שמנו לו מוצר מספר 42 במחיר כזה הוא קיבל את זה בכמות כזאת והזמנה 10248 זה אותה הזמנה אותו בן אדם באותה הזמנה קיבל עוד מוצר אם במחיר כזה בכמות כזאת ולא קיבל הנחה ויש לנו כבר הזמנה הבאה ואנחנו יכולים גם לראות בטבלת ההזמנות בדיוק מה זה ההזמנות האלו מי שזה מעניין אותו אבל זה לא
מעניין אותי מה שמעניין אותי לדעת זה כמה סך הכל סך הכל מחיר סך הכל סכום של כל הזמנה אני רוצה לדעת 248 הזה כמה סך הכל הוא הזמין בכסף. אוקיי כמה סך הכל סכום הזמנה אז איך אני אעשה את זה בסלקט רגיל הוא בעצם עושה שורה שורה ואני צריך לחבר כמה שורות ביחד בשביל זה יש לנו גרופ ביי אז אני אומר לו גרופ ביי גרופ ביי אומר קח את התוצאות של הסלקט ותחלק אותם
לקבוצות גרופ ביי תחלק אותם לקבוצות לפי מה לפי אורדר איידי. תחלק אותם לקבוצות לפי אורדר איידי. זאת אומרת קבוצה ראשונה כל מי שיש לו 248 אתם רואים לפי order ID קבוצה שנייה כל מי שיש לו 249 שימו לב מה הוא עושה הוא לא רק מחלק אותם לקבוצות ומכל קבוצה עושה שורה אחת ופה אני יכול להגיד לו מה אני רוצה מה אני רוצה שיעשה בקבוצה הזאת אני יכול להגיד לו כזה דבר תעשה לי על הקבוצה הזאת סכום של
quantity זאת אומרת עמודת quantity אתם רואים זאת העמודה כמות תעשה עליה סכום כמה כמות סך הכל יש בהזמנה תעשה 5 ועוד 10 ועוד 12 אז למעשה האלגוריתם הוא כזה תעשה סלקט של כל הטבלה הזאת תעשה group by חלק אותם לקבוצות ומכל קבוצה אתה עושה לי שורה אחת שורה אחת מכל קבוצה כאשר קבוצות לפי המספר הזה ועל כל קבוצה מה תעשה תעשה לי פונקציית סכום יופי בואו נראה שזה
עובד הנה יצא לנו 10248 אתם רואים שורה אחת 27 יחידות 10249, 49 יחידות, 10250, סך הכל 60 יחידות. בואו נראה את הנתונים הגולמיים ליד זה שלנו כאן.
Select כוכבית from, אה, אני עשיתי על זה copy-paste. אפשר לדלג על כל הקטע הזה, אפשר לדלג, רק לבחור פה במקום להגיד לו שאני עובד מול Northwind, כל השאילתות תריץ מול Northwind, ואז לכתוב ישר את השם של הטבלה.
ועכשיו תסתכלו מה קורה, אני מריץ גם את זה וגם את זה ביחד, ואז הוא נותן לי שתי טבלאות, אני רוצה לראות שהוא שבאמת צדקתי אז 10248 זה 12 ועוד 10 22 ועוד 5 27 וזה באמת 27 שפה הבנתם אז groupby לוקח מחלק לקבוצות ועושה סכום לפי קבוצה יכלתי דרך אגב להגיד לו בלי groupby אם אני לא עושה groupby אם אני לא עושה groupby אז הוא זה חסר משמעות הוא יעשה סכום
על כל הטבלה כן הוא יעשה סכום על כל הטבלה שזה די חסר משמעות מבחינתי, כן? אה, סליחה, צריך להוריד את ה-order by. אם אני לא מחלק לקבוצות, סכום יעבוד, אבל הוא יעשה לי סך הכל עבור כל המוצרים.
זה לא מעניין אותי, אני רוצה סכום על קבוצה. בגלל שאני רוצה סכום על קבוצה, אני כותב פה order by תחלק לקבוצות, group by. group by מחלק לקבוצות.
יופי. בואו ניתן לזה רק שם יפה. אחרי שם עמודה אני עושה as total quantity, אני יודע מה. כותבים as ושם יפה, ואז זה נותן לזה שם יפה.
הנה total quantity, שם יפה לעמודה. זה חסר משמעות הדבר הזה, רק ליופי. יופי. גם פה אני יכול להגיד as, אני אפילו גם יכול בלי as, דרך אגב.
אורדר. אפשר לכתוב גם בעברית, כן, מספר הזמנה. אם כותבים בעברית, תמיד תשימו n לפני כן, אומר unicode.
הנה, תראו איזה יופי, כתב מספר הזמנה וכמות. סך הכל כמות. עכשיו, אם אתם לא שמים n, זה גם יעבוד, אבל זה בתנאי שמוגדר אצלי ב-regional settings של המחשב, אתם יודעים יש פה ב-regional settings של המחשב, שיהיה עברית.
Current language for non-unicode programs, עברית. בגלל שאני לא רוצה להסתבך עם כל הבעיות של עברית, מה מוגדר במחשב, אני שם n, ו-n אומר לו לעבוד ב-unicode, ש-unicode לא תלוי במה שיש לי במחשב.
יופי. יש לנו כמות ומספר הזמנה, יפה מאוד. אז עשינו שמות לעמודות וראינו ש Groupby מחלק את זה לקבוצות ועל כל קבוצה אני יכול להפעיל פונקציה אגריגטיבית זה נקרא פונקציה אגריגטיבית כמו סאם כמו קאונט קאונט אומר לי כמה שורות יש כמה שורות יש בהזמנה אתם רואים בהזמנה הזאת יש שלוש שורות
בהזמנה הזאת יש שתי שורות ארבע שורות כמה קאונט סופר שורות סאם עושה סכום יפה אבל זה לא מה שהבוס שלי ביקש אתם זוכרים מה הבוס שלי ביקש? פוסט שלי רצה לדעת כמה סכום של ההזמנה, מה זה סכום ההזמנה? כמות כפול מחיר.
אז אני יכול להגיד לסכום תעשה Quantity כפול Unit Price, Quantity כמות כפול Unit Price, הוא עושה מכפלה של שני עמודות האלו ועל המכפלה הזאת הוא עושה סכום.
זה בדיוק מה שרצינו. חבר'ה, העמודה הזאת קודם כל עבור כל שורה מחושב Quantity כפול Unit Price וכל זה מוכנס ל-Sum, לפונקציית Sum.
בואו נראה שזה עובד, עובד, אתם רואים? בואו נראה שזה עובד ביחד אם הוא כותב פה כמות טוב זה לא כמות זה סכום ההזמנה אבל סכום הזמנה סכום הזמנה אז אז מנה דרך אגב אף אחד לא כותב בעברית שום דבר באמצעיות אוקיי בואו נבדוק רק שזה נכון איך אנחנו נבדוק שזה נכון אנחנו ניקח את כל זה
נעתיק לאקסל ובאקסל נעשה עמודה משלנו שאומרת unit price כפול quantity ונגרור את זה למטה שיעשה לי את זה הרבה פעמים. ואני מעוניין רק בשלוש שורות, שזה אומר בשלושת אלו.
שלושת אלו פה למטה, סכום 440. יפה מאוד, לא טעינו. אז מה אנחנו למדים מהעניין? שאפשר לעשות גם עמודה שהיא חישוב של כמה עמודות פלוס 10, אני יכול לעשות כפול 1.1, להוסיף 10%, כן?
אתם יודעים, להכפיל ב-1.1 ואז אני מוסיף 10% ואז אני מקבל תוצאות בעצם 484 במקום, סליחה, במקום כמה סגרתי כבר את האקסל 440 נראה לי אז אפשר לעשות עמודה כפול עמודה וכפול משהו