הרבגוניות של SQL כשפת שאילתות DBMS עלתה עם השנים. השימושיות והרבגוניות הרחבה שלו הופכות אותו לחביב כל הזמנים על כל מנתח נתונים.
יש לא מעט פונקציות ברמה מתקדמות מלבד אלו הרגילות של SQL. פונקציות אלה ידועות בדרך כלל כפונקציות חלון. אם אתה עוסק בנתונים מורכבים וברצונך לבצע חישובים מתקדמים, תוכל להשתמש בהם כדי לנצל את הנתונים שלך בצורה הטובה ביותר.
החשיבות של פונקציות חלון
מספר פונקציות חלון זמינות ב-SQL, וכל אחת מהן תעזור לך לבצע סדרה של חישובים. מיצירת מחיצות ועד לדירוג שורות או הקצאת מספרי שורות, פונקציות החלון האלה עושות קצת מהכל.
פונקציות חלון מועילות כאשר אתה מחיל פונקציות מצטברות על מערך נתונים ספציפי, או אוסף של שורות. פונקציות אלה עולות ומעבר לפונקציות הצבירה ש-GROUP BY מספקת. עם זאת, ההבדל העיקרי הוא שבניגוד לפונקציית הקיבוץ, הנתונים שלך אינם משולבים לשורה אחת.
אינך יכול להשתמש בפונקציות חלון בתוך איפה, מ, ו GROUP BY הצהרות.
תחביר של פונקציית חלון
כאשר אתה מתייחס לפונקציית חלון כלשהי, אתה צריך לעקוב אחר מבנה התחביר המוגדר כברירת מחדל, כדי שהוא יפעל כהלכה. אם תבנה את הפקודה בצורה שגויה, תקבל שגיאה והקוד שלך לא יפעל.
להלן תחביר ברירת המחדל:
בחר שם עמודה1,
{window_function}(שם עמודה2)
OVER([PARTITION BY columnname1] [ORDER BY columnname3]) AS new_column
FROM table_name;
איפה:
- שם עמודה1 הוא שם העמודה הראשון שתרצה לבחור.
- {window_function} הוא השם של פונקציה מצטברת כמו sum, avg, count, row_number, rank או dense_rank.
- שם עמודה2 הוא שם העמודה שבה אתה מחיל את פונקציית החלון.
- שם עמודה3 הוא שם העמודה השלישית, שיהווה את הבסיס למחיצה.
- new_column הוא תווית עבור העמודה החדשה שתוכל להחיל באמצעות כפי ש מילת מפתח.
- שם שולחן הוא השם של טבלת המקור.
פונקציות החלון שונות מחלק מהפונקציות פקודות SQL הבסיסיות ביותר. שלא כמו פונקציות מצטברות ב-SQL, אתה יכול להשתמש בפונקציות החלון האלה כדי לבצע פונקציות מתקדמות.
הכנת מערך הנתונים
אתה יכול להשתמש ב צור טבלה הצהרה ל צור טבלה חדשה ב-SQL. הנה מערך נתונים לדוגמה שבו ישתמש מדריך זה כדי להגדיר כמה פונקציות של חלון:
תאריך הזמנה |
קטגוריה |
צֶבַע |
מחיר מבצע |
כַּמוּת |
---|---|---|---|---|
08-11-2016 |
טלפונים |
שָׁחוֹר |
907.152 |
6 |
12-06-2016 |
קלסרים |
ירוק |
18.504 |
3 |
11-10-2015 |
מכשירים |
צהוב |
114.9 |
5 |
11-10-2015 |
טבלאות |
חום |
1706.184 |
9 |
09-06-2014 |
טלפונים |
אָדוֹם |
911.424 |
4 |
09-06-2014 |
עיתון |
לבן |
15.552 |
3 |
09-06-2014 |
קלסרים |
שָׁחוֹר |
407.976 |
3 |
09-06-2014 |
מכשירים |
צהוב |
68.81 |
5 |
09-06-2014 |
קלסרים |
ירוק |
2.544 |
3 |
09-06-2014 |
אִחסוּן |
תפוז |
665.88 |
6 |
09-06-2014 |
אִחסוּן |
תפוז |
55.5 |
2 |
15-04-2017 |
טלפונים |
שָׁחוֹר |
213.48 |
3 |
05-12-2016 |
קלסרים |
ירוק |
22.72 |
4 |
22-11-2015 |
מכשירים |
ירוק |
60.34 |
7 |
22-11-2015 |
כִּיסְאוֹת |
חום כהה |
71.372 |
2 |
13-05-2014 |
רְהִיטִים |
תפוז |
190.92 |
5 |
פונקציית הסכום מוסברת
נניח שאתה רוצה לחשב את סך המכירות עבור כל ערך בעמודת הקטגוריה. כך תוכל לעשות זאת:
בחרקטגוריה, צבע,
סכום (מחיר_מבצע)
OVER (הזמנה לפי קטגוריה) AS total_sales
FROM sahil.sample;
בקוד שלמעלה, הצהרת SQL מושכת את הקטגוריה והצבע ממערך הנתונים המקורי. פונקציית הסכום מחברת את העמודה מחיר_מכירה. הוא עושה זאת לפי קטגוריה, מכיוון שסעיף OVER מציין סדר לפי עמודת הקטגוריה. התוצאה הסופית היא כדלקמן:
כיצד להשתמש בפונקציית החלון Avg()
כמו פונקציית הסכום, אתה יכול לחשב את הממוצע לשורה של נתונים עם ה ממוצע פוּנקצִיָה. במקום הסכום, תקבל עמודה עם ממוצע המכירות.
בחרקטגוריה, צבע,
ממוצע (מחיר_מבצע)
OVER (סדר לפי קטגוריה) AS avg_sales
FROM sahil.sample;
למד להשתמש בפונקציית החלון Count().
בדומה לפונקציות sum ו-avg, פונקציית חלון הספירה ב-SQL היא די פשוטה ופועלת באותם קווים כמו שתי הפונקציות האחרות. כאשר אתה עובר את פונקציית הספירה, אתה מקבל את הספירה הכוללת של כל ערך בעמודה החדשה.
כך תוכל לחשב את הספירה:
בחרקטגוריה, צבע,
ספירה (קטגוריה)
OVER (סדר לפי קטגוריה) AS item_count
FROM sahil.sample;
פונקציית החלון Row_Number()
בניגוד לחלק מפונקציות החלון האחרות המפורטות לעיל, ה-row_number() עובד מעט שונה. הפונקציה row_number() מקצה מספר שורה לכל שורה, בהתאם לסעיף סדר לפי. מספר השורה ההתחלתית הוא 1; ה-row_number מקצה ערך מתאים לכל שורה עד הסוף.
להלן המבנה הבסיסי של פונקציה row_number():
בחרקטגוריה, צבע,
row_number()
OVER (סדר לפי קטגוריה) AS item_number
FROM sahil.sample;
אבל מה קורה אם אתה רוצה להקצות מספרי שורות נפרדים לכל פריט קטגוריה? התחביר לעיל קובע מספר סידורי מתגלגל, ללא קשר לפריטים המאוחסנים בקטגוריה. לדוגמה, קטגוריית המכשירים צריכה לכלול את המספור הבלעדי שלה, ואחריו קלסרים וכו'.
אתה יכול להשתמש ב חֲלוּקָה פונקציה לבצע משימה פשוטה, אך מעשית זו. מילת המפתח מחיצה מקצה מספרי שורות ייעודיים על בסיס כל פריט קטגוריה.
בחרקטגוריה, צבע,
row_number()
OVER (חלוקה לפי קטגוריה סדר לפי קטגוריה) AS item_number
FROM sahil.sample;
הפונקציות Rank() ו-Dense_Rank()
ה דַרגָה() הפונקציה פועלת אחרת מה- row_number() פוּנקצִיָה. עליך לציין את שם העמודה בתוך הסדר לפי פונקציה, כדי להשתמש בו כבסיס להגדרת ערכי הדירוג. לדוגמה, בדוגמת הקוד הבאה, תוכל להשתמש בעמודת הצבע בתוך הסדר לפי פונקציה. לאחר מכן, השאילתה תשתמש בסדר הזה כדי להקצות ערך דירוג לכל שורה.
אתה יכול להשתמש בתחביר הקוד שלהלן כדי להעביר פונקציית דירוג ב-SQL:
בחרקטגוריה, צבע,
דַרגָה()
OVER (סדר לפי צבע) AS item_rank
FROM sahil.sample;
תסתכל על הפלט כדי להבין איך פונקציה זו פועלת.
הסדר לפי פונקציה ממיין את קטגוריית הצבע, בעוד שפונקציית הדירוג מקצה דירוג לכל צבע. עם זאת, לכל אותם ערכי צבע יש דירוג זהה, בעוד שלצבעים השונים יש דרגות נפרדות. הצבע השחור מופיע שלוש פעמים בתוך מערך הנתונים; במקום להקצות ערך דירוג של 1, 2 ו-3, הפריטים בצבע שחור מקבלים דירוג של 1.
עם זאת, הצבע הבא בראון מקבל דירוג 4 במקום דרגה 2. פונקציית הדירוג מדלגת על ערכים ומקצה את הערך הכרונולוגי הבא לערכים השונים. אם אתה רוצה להקצות ערך דירוג משמעותי יותר, אתה יכול להשתמש ב- dense_rank() פוּנקצִיָה.
הפונקציה dense_rank לא מדלגת על שום ערכי דירוג במהלך סדר לפי פונקציה. לדוגמה, שלושת פריטי הצבע הראשונים (שחור) יהיו בדרגה 1. עם זאת, לצבע הבא (חום) לא תהיה דרגה 4, אלא דרגה 2, שהיא המספר הכרונולוגי הבא ברשימת המספור. הפונקציה dense_rank היא פונקציית חלון מעשית יותר שכן היא מקצה ערך משמעותי לרשימת הפריטים.
כך תוכל להשתמש בפונקציה dense_rank ב-SQL:
בחרקטגוריה, צבע,
dense_rank()
OVER (סדר לפי צבע) AS item_rank
FROM sahil.sample;
והנה דוגמה כיצד ייראה הפלט מהפונקציה הזו:
SQL פונקציות להצלה
פונקציות החלונות של SQL הן אידיאליות לביצוע פעולות אנליטיות מתקדמות. עם זאת, אתה יכול להשתמש בשפע של פקודות SQL אחרות כדי להבטיח כי כישורי החישוב שלך הם ברמה הגבוהה ביותר. כאשר אתה משלב ומחשב תוצאות מרובות במכה אחת, אין דבר טוב יותר משימוש בתתי שאילתות של SQL.
שאילתות משנה הן כלי מצוין לביצוע פונקציות מתקדמות, לשיפור איכות התוצאות שלך. בהתאם לצורך של השעה, אתה יכול להתאים אישית את השאילתות שלך ולהפוך אותן ליעילות יותר כדי להתאים לדרישות שלך.