ahmedrahil786

TTT - car list algo - A

Jun 17th, 2020
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Sorting Algorithm */
  2. select A.list_id, A.listing_date, A.car_brand, A.car_model, A.host, A.category,
  3. A.completed_booking as bookings, coalesce((A.fulfilled_booking)::numeric/nullif((A.fulfilled_booking + A.rejected_booking), 0),0) as fulfillment_rate,
  4. A.listing_price, (A.listing_price - 150) / 150 as price_diff_median,
  5. (listing_price - case when (31*insured_amount)/13440 < '20' then '20' else (31*insured_amount)/13440 end)/
  6. (case when (31*insured_amount)/13440 < '20' then '20' else (31*insured_amount)/13440 end) as price_diff, coalesce(A.review,0) as review,
  7. coalesce((A.rental_amount - A.payout_amount) / A.rental_amount, 0) as commission from
  8. (select l.id as list_id, date_trunc('day', l.created_at)::date as listing_date,
  9. br.name as car_brand, m.name as car_model,
  10. case when u.display_name is not null then u.display_name else concat(u.first_name,' ',u.last_name) end as host,
  11. case when cu.id is not null then 'Fleet'
  12. when cu.id is null and li.insurance_package_id = 2 then 'Individual (Trevo-Shield)'
  13. else 'Individual (Basic)' end category,
  14. count(distinct case when b.status = 'completed' then b.id end) as completed_booking,
  15. count(distinct case when b.status in ('accepted', 'completed') then b.id end) as fulfilled_booking,
  16. count(distinct case when b.status = 'rejected' and (b.reason not in ('auto-rejected') or b.reason is null) then b.id end) as rejected_booking,
  17. lp.base_price as listing_price, li.insured_amount,
  18. avg(case when b.status = 'completed' and brv.type = 'renter' then brv.rating end) as review,
  19. sum(case when b.status = 'completed' then bl.amount end) as rental_amount,
  20. sum(case when b.status = 'completed' then po.amount end) as payout_amount
  21. from listings l
  22. left join models m on l.model_id = m.id
  23. left join brands br on m.brand_id = br.id
  24. left join listing_pricing lp on lp.listing_id = l.id
  25. left join listing_insurance li on li.listing_id =l.id
  26. left join company_users cu ON cu.user_id = l.user_id
  27. left join users u on l.user_id = u.id
  28. left join bookings b on b.listing_id = l.id
  29. left join booking_reviews brv on brv.booking_id = b.id
  30. left join payouts po ON po.booking_id=b.id
  31. left JOIN booking_lines bl ON bl.booking_id=b.id AND bl.slug='rental-fee'
  32. where l.status = 'approved' and l.deleted_at is null
  33. group by 1,2,3,4,5,6,10,11) A
  34. /* select percentile_cont(0.5) WITHIN GROUP (ORDER BY lp.base_price) as median_price from listing_pricing lp */
  35.  
  36. /* Car Model */
  37. select br.name as car_brand, m.name as car_model,
  38. count(distinct l.id) as cars,
  39. count(distinct case when b.status not in ('payment_failed') then b.id end) as requested_booking,
  40. count(distinct case when b.status in ('accepted', 'completed') then b.id end) as fulfilled_booking,
  41. count(distinct case when b.status = 'completed' then b.id end) as completed_booking,
  42. sum(case when b.status = 'completed' then b.gross_amount end) as gross_amount,
  43. sum(case when b.status = 'completed' then b.gross_amount end) - sum(case when b.status = 'completed' then b.net_amount end) as coupon,
  44. sum(case when b.status = 'completed' then b.net_amount end) as net_amount,
  45. sum(case when b.status = 'completed' then (EXTRACT(EPOCH FROM b.request_end_at) - EXTRACT(EPOCH FROM b.request_start_at))/86400 end) as dur,
  46. sum(case when b.status = 'completed' then ceil((EXTRACT(EPOCH FROM b.request_end_at) - EXTRACT(EPOCH FROM b.request_start_at))/86400) end) as adj_dur
  47. from listings l
  48. left join models m on l.model_id = m.id
  49. left join brands br on m.brand_id = br.id
  50. left join bookings b on b.listing_id = l.id
  51. where l.status = 'approved'
  52. and l.deleted_at is null
  53. group by 1,2
  54. order by 1,2
  55.  
  56. /* Full List */
  57. select l.id, case when u.display_name is not null then u.display_name else concat(u.first_name,' ',u.last_name) end as host,
  58. case when cu.id is not null then 'Fleet'
  59. when cu.id is null and li.insurance_package_id = 2 then 'Individual (Trevo-Shield)'
  60. else 'Individual (Basic)' end category,
  61. m.type as car_type, br.name as car_brand, m.name as car_model, date_trunc('day', l.created_at)::date as listing_date,
  62. lp.base_price as listing_price, li.insured_amount, m.year as purchase_year,
  63. count(distinct case when b.status = 'completed' then b.id end) as completed_booking
  64. from listings l
  65. left join models m on l.model_id = m.id
  66. left join brands br on m.brand_id = br.id
  67. left join listing_pricing lp on lp.listing_id = l.id
  68. left join listing_insurance li on li.listing_id =l.id
  69. left join company_users cu ON cu.user_id = l.user_id
  70. left join users u on l.user_id = u.id
  71. left join bookings b on b.listing_id = l.id
  72. where l.status = 'approved'
  73. and l.deleted_at is null
  74. group by 1,2,3,4,5,6,7,8,9,10
  75. order by 2
Add Comment
Please, Sign In to add comment