
רוצים להתאמן על מבחן SQL
אמיתי מראיון עבודה?
חשוב לזכור כמה כללים לפני שמתחילים
יש שני סוגי מבחנים בראיונות עבודה או יותר נכון שתי אסכולות:
1.מבחן ארוך שבדרך כלל יבדוק יותר טכניות ופחות חשיבה מחוץ לקופסה,
מבחן מסוג כזה יבדוק פונקציות מוכרות וטכניקות פשוטות GROUP BY , WHERE , WINDOWS FUNCTION.
זמן המבחן יאפשר לכם לחשוב באריכות על התשובה והמטרה היא שבסוף המבחן תמלאו את כל השאלות בהצלחה, לרוב יתבטא במבחן ביתי.
2. מבחן קצר בין רבע שעה ל45 דקות בו תצטרכו לענות בצורה מהירה מאוד כמעין ״שליפה מהירה״ על השאלות תוך התמקדות ברעיון ובלוגיקה שבה ה SQL בנוי , במבחן מסוג זה תצטרכו להראות טכניקות מתוחכמות.
SELF JOIN , ROW_NUMBER,FIRST_VALUE()
חשוב לזכור שככל שתתרגלו יותר מבחנים ככה תגיעו יותר מוכנים למבחן, חשוב שתגיעו מוכנים כך שהרקע הטכני לא יהיה מכשול בשום צורה, אם אתם מעוניינים לתרגל מבחנים עם פתרונות מלאים בווידאו אתם מוזמנים להיכנס לקורס שלי, אם אתם מעוניינים לתרגל את ה SQL שלכם אתם יכולים להיכנס לקורס של חמישים שאלות ב SQL
שאלות
מנהל אתר ecommerce מצליח מעוניין לקבל כמה אינדיקציות בעקבות שינויים שבוצעו באתר.
לפנייך שתי טבלאות:
בטבלה ראשונה תמצא:
- רשימת לקוחות
- תאריך הצטרפות
- , מדינה
- כמות הפעמים שהלקוח עשה לייק
SAVED_ITEMS | REGISTRATION_DATE | COUNTRY | USER_ID |
---|---|---|---|
1 | 1/1/21 | USA | 54363 |
3 | 2/3/21 | UK | 65389 |
5 | 3/2/21 | ISRAEL | 89745 |
בטבלה השנייה תמצא: רשימות לקוחות והכנסוות מלקוחות אלו
USER_ID | REVENUE |
---|---|
89745 | 100$ |
65389 | 150$ |
לפני שאתם נגשים לפתור את השאלות אני ממליץ לכם לכתוב את השאילתא באמצעות שימוש בדאטה בייס bigquery,
שאלות
- רשום שאילתא שמחשבת לפי מדינה את כמות הלייקים וההכנסות ללקוחות שהוציאו מעל 140?
- חשב לפי מדינה את כמות הלייקים מתוך לקוחות שלא שילמו?
תשובות
SELECT country
,SUM(likes) as likes
.SUM(revenue) as revenue
FROM table1
LEFT JOIN table2
ON table1.user_id = table2.user_id
WHERE revenue >140
GROUP BY 1
SELECT country
,SUM(likes) as likes
FROM table1
LEFT JOIN table2
ON table1.user_id = table2.user_id
WHERE revenue IS NULL
GROUP BY 1
שאלה
User_id | Purchase_time | Drink |
---|---|---|
2749 | 23/02/2018 11:00 | cola |
2749 | 23/02/2018 12:00 | pepsi |
2749 | 23/02/2018 11:00 | cola |
3334 | 23/02/2018 17:00 | pepsi |
3334 | 23/02/2018 11:00 | cola |
- חשב את המשקה הראשון שכל יוזר קנה ואת המשקה האחרון שקנה?
כך שתוצר טבלה בתצורה הזאת:
User_id | status | drink |
---|---|---|
2749 | first | cola |
2749 | last | pepsi |
3177 | first | cola |
3177 | last | pepsi |
תשובה
SELECT 'first' AS status,
user_id,
status
FROM
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY user_id order by purchase_time ) as rn
FROM
)
WHERE rn = 1
UNION ALL
SELECT 'last' AS status,
user_id,
status
FROM
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY user_id order by purchase_time DESC) as rn
FROM
)
WHERE rn = 1
ORDER BY user_id
שאלה
מנהל הדאטה רוצה להבין את השינוי בביצועי החברה, טרנד יומי לא מספק לו את ההבנה והוא מעוניין השוואה של אותו יום בשבוע קודם (לימים יש חשיבות משמעותית מבחינת ביצועי החברה, ימי שני שלישי ורביעי חזקים וראשון ושבת חלשים)
לפניך טבלה עם ביצועי החברה בשבועיים האחרונים ברמת היום
- צור עמודה נוספת שמראה את האחוז שינוי מהיום הקודם מאותו שבוע?
דוגמא:
בתאריך 17/7/2022 ההכנסות היו 110 לעומת 120 אחוז שינוי של -8%
day_week | date | revenue |
---|---|---|
1 | 10/07/2022 | 120 |
2 | 11/07/2022 | 180 |
3 | 12/07/2022 | 200 |
4 | 13/07/2022 | 220 |
5 | 14/07/2022 | 240 |
6 | 15/07/2022 | 230 |
7 | 16/07/2022 | 100 |
1 | 17/07/2022 | 110 |
2 | 18/07/2022 | 166 |
3 | 19/07/2022 | 184 |
4 | 20/07/2022 | 202 |
5 | 21/07/2022 | 221 |
6 | 22/07/2022 | 212 |
7 | 23/07/2022 | 92 |
תשובה
/* ANSWER ONE */
select t1.day_week,
t1.date,
t1.revenue
safe_divide(t2.revenue,t1.revenue) - 1
from t1
left join t1 as t2
on t1.date - 7 = t2.date
/* ANSWER TWO */
select t1.date
,t1.orders
,lag(t1.orders,7) over (order by date) seven_days_orders
from t1
order by 1

מבחנים לראיונות עבודה ב SQL
מבחני מיון ב SQL לראיונות עבודה,
להתקבל למקומות העבודה
הכי נחשקים במשק,
לתפקיד Data analyst/Product analyst/Business analyst