סעיף OVER של SQL

S Yp Over Sl Sql



אחת התכונות המתקדמות ביותר של SQL היא סעיף OVER. זוהי תכונה המאפשרת לנו לבצע את החישובים ולהחיל את פונקציות חלון SQL על תת-קבוצה מסוימת של שורות בתוך ערכת תוצאות נתונה.

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

הצטרפו אלינו למדריך זה כשאנחנו לומדים כל מה שצריך לדעת כדי להתחיל לעבוד עם סעיף ה-OVER.







דרישות:

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



במקרה שלנו, נשתמש במסד הנתונים של MySQL עם מסד הנתונים לדוגמה של Sakila. רק ודא שיש לך מספיק הרשאות ושמנוע מסד הנתונים שלך תומך בפונקציות החלון.



תחביר:

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





ככזה, אנו יכולים לבטא את התחביר של הסעיף באופן הבא:

<פונקציית חלון>(ביטוי) OVER (

[PARTITION BY partition_expression, ...]

[ORDER BY sort_expression [ASC | DESC], ...]

[frame_specification]

)

בתחביר הנתון, אנו יכולים לפרק כל רכיב באופן הבא:



  1. - זה מתייחס לפונקציית החלון שאנו רוצים להחיל על חלון מסוים של שורות כגון SUM(), AVG(), ROW_NUMBER(), RANK וכו'.
  2. ביטוי - זה מציין עמודה או ביטוי שעבורם מופעלת פונקציית החלון.
  3. PARTITION BY – זהו סעיף אופציונלי המחלק את ערכת התוצאות למחיצות כאשר כל מחיצה היא כמו יחידה נפרדת שבה הפונקציה מוחלת. שורות בתוך אותה מחיצה חולקות את אותם ערכים בעמודות שצוינו.
  4. ORDER BY - זה מציין את סדר עיבוד השורות בכל מחיצה.
  5. frame_specification - זהו סעיף אופציונלי המגדיר את מסגרת השורות בתוך המחיצה. מפרטי המסגרת הנפוצים כוללים ROWS BETWEEN ו- או RANGE BETTWEEN ו-

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

דוגמא:

הבה נדגים כיצד להשתמש בסעיף באמצעות מסד הנתונים לדוגמה של Sakila. שקול דוגמה שבה עלינו לקבוע את סך ההכנסות עבור כל קטגוריית סרט.

אנו יכולים להשתמש בפונקציית sum window עם פסקת OVER וחבורה של הצהרות join כפי שמוצג בדוגמה הבאה:

בחר
category.name AS category_name,
film.title AS film_title,
film.rental_rate,
SUM(payment.amount) OVER (PARTITION BY category.name) AS total_revenue
מ
סרט צילום
לְהִצְטַרֵף
סרט_קטגוריית ON
film.film_id = film_category.film_id
לְהִצְטַרֵף
קטגוריה פועלת
film_category.category_id = category.category_id
לְהִצְטַרֵף
המלאי פועל
film.film_id = inventory.film_id
לְהִצְטַרֵף
השכרה ON
inventory.inventory_id = rental.inventory_id
לְהִצְטַרֵף
תשלום ON
rental.rental_id = payment.rental_id
מיין לפי
שם קטגוריה,
כותרת הסרט;

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

עלינו להשתמש בסעיף PARTITION BY כדי להבטיח שחישוב הסכום יתחיל מחדש בכל קטגוריה ייחודית.

הפלט המתקבל הוא כדלקמן:

הנה לך!

סיכום

בדוגמה זו, חקרנו את היסודות של עבודה עם פסקת OVER ב-SQL. זה לא סעיף בסיסי ודורש היכרות קודמת עם תכונות SQL אחרות.