תרגול שפת SQL מספר 1038 – תדירות רכישה של לקוחות

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

לעמוד התרגילים המלא לחצו כאן.

לפניך חלק מטבלת orders מתוך דאטה-בייס בשם e_commerce

טבלת Orders

order_time_stamporder_dateorder_date_houravg_unit_pricesum_orderitem_orderscountrycustomer_idorder_id
2010-12-01 08:35:002010-12-0112/1/2010 8:355.949999809317.84999942781United Kingdom13,047536369
2010-12-01 08:45:002010-12-0112/1/2010 8:452.764500013855.860005855620France12,583536370
2010-12-01 09:00:002010-12-0112/1/2010 9:002.5499999523203.99999618531United Kingdom13,748536371
2010-12-01 09:01:002010-12-0112/1/2010 9:011.850000023822.20000028612United Kingdom17,850536372
2010-12-01 09:02:002010-12-0112/1/2010 9:023.3193749636259.859997272516United Kingdom17,850536373
2010-12-01 09:09:002010-12-0112/1/2010 9:0910.9499998093350.39999389651United Kingdom15,100536374
2010-12-01 09:32:002010-12-0112/1/2010 9:323.3193749636259.859997272516United Kingdom17,850536375
2010-12-01 09:32:002010-12-0112/1/2010 9:323328.79999923712United Kingdom15,291536376
2010-12-01 09:34:002010-12-0112/1/2010 9:341.850000023822.20000028612United Kingdom17,850536377
2010-12-01 09:37:002010-12-0112/1/2010 9:371.7552631701444.980001211219United Kingdom14,688536378
2010-12-01 09:41:002010-12-0112/1/2010 9:411.450000047734.80000114441United Kingdom17,809536380
2010-12-01 09:41:002010-12-0112/1/2010 9:412.5199999877449.979997038835United Kingdom15,311536381
2010-12-01 09:45:002010-12-0112/1/2010 9:455.9708333512430.600001096712United Kingdom16,098536382
2010-12-01 09:53:002010-12-0112/1/2010 9:534.7807691831489.599996089913United Kingdom18,074536384
2010-12-01 09:56:002010-12-0112/1/2010 9:565.5714286906130.85000157367United Kingdom17,420536385
2010-12-01 09:57:002010-12-0112/1/2010 9:572.7499999205508.19998836523United Kingdom16,029536386
2010-12-01 09:58:002010-12-0112/1/2010 9:582.65199995043,193.91996383675United Kingdom16,029536387
2010-12-01 09:59:002010-12-0112/1/2010 9:593.3764285211226.139998316814United Kingdom16,250536388
2010-12-01 10:03:002010-12-0112/1/2010 10:035.2785713673358.249995231614Australia12,431536389
2010-12-01 10:19:002010-12-0112/1/2010 10:192.45291666351,825.739990472824United Kingdom17,511536390
2010-12-01 10:29:002010-12-0112/1/2010 10:2918.398999989318.139999866510United Kingdom13,705536392
2010-12-01 10:37:002010-12-0112/1/2010 10:379.949999809379.59999847411United Kingdom13,747536393
2010-12-01 10:39:002010-12-0112/1/2010 10:392.18818179311,024.680003404611United Kingdom13,408536394
2010-12-01 10:47:002010-12-0112/1/2010 10:472.5707142821507.879993915614United Kingdom13,767536395
2010-12-01 10:51:002010-12-0112/1/2010 10:515.2116666238376.35999584218United Kingdom17,850536396
2010-12-01 10:51:002010-12-0112/1/2010 10:514.6500000954279.0000057222United Kingdom17,924536397

אנא חשבו את ממוצע וסטיית התקן של הימים שעברו בין הרכישות של כל לקוח.

שימו לב:

  1. יש לסנן את ההזמנות שסכומם קטן מ 0 (אלו החזרים ולא הזמנות).
  2. יש לסנן לקוחות שרכשו רק פעם אחת כי הם אינם לקוחות חוזרים.
בשביל פתרון והסבר אנא גללו למטה.

select

       customer_id,

       avg(days_elapsed) as avg_days_elapsed,

       stddev(days_elapsed) as std_days_elapsed 

from

(

       select

             order_date-lag(order_date) over(partition by customer_id order by order_date asc) as days_elapsed,

             count(order_id) over (partition by customer_id) as customer_orders

             ,customer_id

       from

             e_commerce.orders

       where

             sum_order > 0

) as orders_with_last_order_date

where

       customer_orders>1  

group by

       1

 

 

הסבר:

בשאילתה הפנימית חישבנו את הימים שעברו בעזרת פונקציית החלון Lag ואת כמות הרכישות של כל לקוח. כמו כן, הסרנו את ההזמנות שקטנות שסכום ההזמנה שלהם קטן מאפס.
בשאילתה החיצונית סיננו את הלקוחות שהזמינו פעם אחת וחישבנו את הממוצע וסטית התקן לכל לקוח לי הימים שעברו בין הקניות שלו. 

Yuval Marnin

לחברות המעוניינות בשירותי פרילנס או מנטורינג של אנליסט, ניתן לפנות אליי ל[email protected]