דירוג פוסטגרס

Dyrwg Pwstgrs



ב-PostgreSQL, הפונקציה rank() היא פונקציית Window המאפשרת לנו להקצות דירוג לכל שורה בתוך ערכת תוצאות על סמך קריטריון מיון נתון. כמו רוב פונקציות החלון, פונקציית הדירוג מועילה בשאילתות אנליטיות כמו קביעת הדירוג של שורה ביחס לאחרים בקבוצת תוצאות נתונה.

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

PostgreSQL Rank() פונקציה

הבא מציג את התחביר של הפונקציה rank() ב-PostgreSQL:







RANK() OVER (PARTITION BY partition_expression ORDER BY sort_expression [ASC|DESC])

נתחיל בקריאה לפונקציה rank() . לאחר מכן אנו משתמשים במילת המפתח OVER כדי לציין שאנו רוצים לבצע פעולת פונקציית חלון.



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



לבסוף, יש לנו את הסעיף ORDER BY שמציין את העמודה או הביטוי שקובעים את סדר השורות.





PostgreSQL Rank() דוגמה לפונקציה

השאילתה הבאה מדגימה דוגמה בסיסית לשימוש בפונקציית rank() של PostgreSQL:

ערך SELECT, RANK() OVER (ORDER BY value) AS rank
מ (
ערכים (10), (20), (5), (15), (10)
) נתוני AS(ערך);

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



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

ערך SELECT, RANK() OVER (חלוקה לפי ערך % 2 ORDER BY value) AS rank
מ (
ערכים (10), (20), (5), (15), (10)
) נתוני AS(ערך);

דוגמה לפונקציה PostgreSQL Rank() עם הסעיף Partition By

שקול את הדוגמה הבאה:

ערך SELECT, RANK() OVER (חלוקה לפי ערך % 2 ORDER BY value) AS rank
מ (
ערכים (10), (20), (5), (15), (10)
) נתוני AS(ערך);

בדוגמה זו, הוספנו את פסקת PARTITION BY עם ביטוי שבודק אם הערך הוא מספר זוגי או אי-זוגי. זה אמור למעשה לקבץ את הערכים לשתי מחיצות: האחת עבור מספרים זוגיים (כאשר השארית היא 0) והשנייה עבור מספרים אי-זוגיים (כאשר השאר הוא 1).

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

דוגמה לפונקציה PostgreSQL Rank() על ידי שילוב של תכונות SQL מרובות

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

אנו יכולים להשתמש בפונקציה rank() כפי שמוצגת בשאילתה הבאה:

SELECT customer_id, first_name, last_name, total_payments,
RANK() OVER (ORDER BY total_payments DESC) AS rank
מ (
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
מלקוח ג
JOIN תשלום p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS customer_payments
סדר לפי דרגה
LIMIT 10;

בדוגמה זו, אנו בוחרים את ה- customer_id, first_name, last_name, total_payment, והדירוג שהוקצה (). לאחר מכן, אנו משתמשים בפונקציה rank() כדי להקצות דירוג לכל לקוח בהתבסס על total_payment שממוין בסדר יורד.

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

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

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

סיכום

בדקנו כיצד אנו יכולים לעבוד עם הפונקציה rank() ב-PostgreSQL כדי להביא את הדירוג של שורה נתונה מקבוצת תוצאות בהתבסס על התנאים שהוגדרו. סקרנו גם כיצד לשלב את הפונקציה rank() עם כלי SQL אחרים כדי ליצור שאילתות מורכבות יותר.