השארת שורה אחת לכל מפתח
חלק מהיחידה מעבר ליסודות במסלול ה-SQL של Coddy. שיעור 26 מתוך 27.
לעיתים קרובות תהיה לך טבלה שבה מפתח (לקוח, חיישן, מוצר) מופיע כמה פעמים, ואתה רוצה לשמור רק את העדכני ביותר, או את זה עם הציון הגבוה ביותר.
השתמשו ב־ROW_NUMBER() באותו אופן שבו השתמשתם בו עבור N העליונים, ואז השאירו את rn = 1.
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY customer_id ORDER BY purchased_at DESC
) AS rn
FROM purchases
)
SELECT * FROM ranked WHERE rn = 1הפקודה PARTITION BY אומרת "דירוג אחד לכל מפתח זה"; הפקודה ORDER BY אומרת "החדשים ביותר תחילה". שורה 1 בכל מחיצה היא השורה שרוצים לשמור.
אתגר
בינוניטבלאות ועמודות זמינות:
readings:sensor_id,recorded_at,value
עבור כל חיישן שיש לו לפחות 3 קריאות, החזר את הקריאה היחידה בעלת הערך הגבוה ביותר. אם יש תיקו בין שתי קריאות ב-value, השאר את הקריאה העדכנית יותר.
הצג את sensor_id, recorded_at, value, לפי סדר sensor_id.
נסו בעצמכם
WITH ranked AS (
-- ROW_NUMBER() OVER (PARTITION BY sensor_id ORDER BY value DESC, recorded_at DESC)
-- COUNT(*) OVER (PARTITION BY sensor_id) כדי לסנן חיישנים עם >= 3 קריאות
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מעבר ליסודות
6מתכונים לניתוח נתונים
N המובילים בכל קבוצהאחוז מתוך הסך הכולסכום מצטברהשארת שורה אחת לכל מפתחסיכום – הלקוחות המוביליםתרגלו בעצמכם: SQL אונליין