Advertisement
nsv54

Untitled

Nov 5th, 2020 (edited)
824
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ----------------------------------------------------------
  2. ----- DAU ------------------------------------------------
  3. WITH orders AS (
  4.     SELECT
  5.         doc::json AS dj
  6.     FROM common.order_proc_rotax
  7.     LIMIT 10000
  8. ),
  9. parsed_orders AS (
  10.     SELECT
  11.         dj -> 'order' ->> 'user_id' AS user_id,
  12.         (dj ->> 'created')::TIMESTAMP AS created_dttm,
  13.         dj -> 'order' ->> 'city' AS city
  14.     FROM orders
  15. )
  16.  
  17. select
  18.     city,
  19.     date_trunc('day', created_dttm) as day,
  20.     count(user_id)
  21. from
  22.     parsed_orders
  23. group by
  24.     city, day
  25. order by
  26.     city, day;
  27.  
  28. -------------------------------------------------------
  29. ----- MAU ---------------------------------------------
  30. WITH orders AS (
  31.     SELECT
  32.         doc::json AS dj
  33.     FROM common.order_proc_rotax
  34.     LIMIT 10000
  35. ),
  36. parsed_orders AS (
  37.     SELECT
  38.         dj -> 'order' ->> 'user_id' AS user_id,
  39.         (dj ->> 'created')::TIMESTAMP AS created_dttm,
  40.         dj -> 'order' ->> 'city' AS city
  41.     FROM orders
  42. )
  43.  
  44. select
  45.     city,
  46.     date_trunc('month', created_dttm) as month,
  47.     count(user_id)
  48. from
  49.     parsed_orders
  50. group by
  51.     city, month
  52. order by
  53.     city, month;
  54.  
  55.  
  56.  
  57. -------------------------------------------------
  58. ----- жалобы ------------------------------------
  59. WITH orders AS (
  60.     SELECT
  61.         doc::json AS dj
  62.     FROM common.order_proc_rotax
  63.     LIMIT 10000
  64. ),
  65. parsed_orders AS (
  66.     SELECT
  67.         dj -> 'order' -> 'feedback' -> 'choices' ->> 'low_rating_reason' as lr_reason,
  68.         (dj -> 'order' ->> 'cost')::DECIMAL AS cost,
  69.         (dj ->> 'created')::TIMESTAMP AS created_dttm,
  70.         dj -> 'order' ->> 'city' AS city
  71.     FROM orders
  72. ),
  73. reasons as (
  74.     SELECT
  75.            city,
  76.            unnest(string_to_array(substring(lr_reason, 3, length(lr_reason) - 4), '", "')) as complain,
  77.            created_dttm
  78.     FROM parsed_orders
  79.     WHERE lr_reason is not null
  80. )
  81.  
  82. select
  83.     city,
  84.     date_trunc('day', created_dttm) as day,
  85.     complain,
  86.     count(complain)
  87. from
  88.      reasons
  89. group by
  90.     city, day, complain
  91. order by
  92.     city, day;
  93.  
  94.  
  95. ------------------------------------------------
  96. ----- колл-центр ------------------------------
  97. WITH orders AS (
  98.     SELECT
  99.         doc::json AS dj
  100.     FROM common.order_proc_rotax
  101.     LIMIT 100000
  102. ),
  103. parsed_orders AS (
  104.     SELECT
  105.         dj -> 'order' ->> 'application' AS app,
  106.         (dj -> 'order' ->> 'cost')::DECIMAL AS cost,
  107.         (dj ->> 'created')::TIMESTAMP AS created_dttm,
  108.         dj -> 'order' ->> 'city' AS city
  109.     FROM orders
  110. )
  111.  
  112. SELECT
  113.     city,
  114.     date_trunc('day', created_dttm) AS day,
  115.     avg(cost) AS mean_cost,
  116.     COUNT(*) AS total_calls
  117. FROM parsed_orders
  118. WHERE app = 'callcenter'
  119. GROUP BY city, day, app
  120. ORDER BY city, day
  121.  
  122.  
  123.  
  124. -------------------------------------------------------
  125. ----- прогноз и реальное время в пути -----------------
  126. WITH orders AS (
  127.     SELECT
  128.         doc::json AS dj
  129.     FROM common.order_proc_rotax
  130.     LIMIT 100000
  131. ),
  132. parsed_orders AS (
  133.     SELECT
  134.         (dj -> 'order' -> 'calc' ->> 'time')::decimal AS ml_time,
  135.         (dj ->> 'created')::TIMESTAMP AS created_dttm,
  136.         (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> 0 ->> 'c')::timestamp as cr_time,
  137.         (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> -1 ->> 'c')::timestamp as finish_time,
  138.         (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> -1 ->> 't') as finish_status,
  139.         (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> -2 ->> 'c')::timestamp as riding_time,
  140.         (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> -2 ->> 't') as riding_status,
  141.         dj -> 'order' ->> 'city' AS city
  142.     FROM orders
  143. )
  144.  
  145. select
  146.     city,
  147.     avg(ml_time - date_part('minute', (finish_time - riding_time)) * 60 + date_part('second', (finish_time - riding_time))) as time_difference,
  148.     date_trunc('day', created_dttm) as day
  149. from parsed_orders
  150. where finish_status = 'complete' and ml_time < 9000
  151. group by city, day
  152.  
  153.  
  154. -------------------------------------------------------
  155. ----- среднее время оидания ---------------------------
  156. WITH orders AS (
  157.     SELECT
  158.         doc::json AS dj
  159.     FROM common.order_proc_rotax
  160.     LIMIT 100000
  161. ),
  162. parsed_orders AS (
  163.     SELECT
  164.         (dj ->> 'created')::TIMESTAMP AS created_dttm,
  165.         (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> 0 ->> 'c')::timestamp as cr_time,
  166.         (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> -3 ->> 'c')::timestamp as waiting_time,
  167.         (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> -3 ->> 't') as waiting_status,
  168.         dj -> 'order' ->> 'city' as city
  169.     FROM orders
  170. )
  171.  
  172. select
  173.        city,
  174.        avg(date_part('minute', waiting_time - cr_time) * 60 + date_part('second', waiting_time - cr_time)) as avg_waiting_time,
  175.        date_trunc('day', created_dttm) as day
  176. from parsed_orders
  177. where waiting_status = 'waiting'
  178. group by city, day;
  179.  
  180. -- ожидание с параметром
  181. WITH orders AS (
  182. SELECT
  183. doc::json AS dj
  184. FROM common.order_proc_rotax
  185. LIMIT 100000
  186. ),
  187. parsed_orders AS (
  188. SELECT
  189.     dj ->> '_id' AS id,
  190.     (dj ->> 'created')::TIMESTAMP AS created,
  191.     (dj -> 'performer' ->> 'driver_id') AS driver_id,
  192.     dj -> 'order' ->> 'user_id' AS user_id,
  193.     dj -> 'order' -> 'request' ->> 'offer' AS offer_id,
  194.  
  195.     dj -> 'order' ->> 'city' AS city,
  196.     (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> 0 ->> 'c')::timestamp as cr_time,
  197.     (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> -3 ->> 'c')::timestamp as waiting_time,
  198.     (dj -> 'order_info' -> 'statistics' -> 'status_updates' -> -3 ->> 't') as waiting_status,
  199.        dj -> 'order_info' ->> 'statistics' as stat,
  200.  
  201.     dj -> 'order' ->> 'status' AS status,
  202.     dj -> 'order' ->> 'taxi_status' AS taxi_status,
  203.     dj -> 'order' -> 'creditcard' -> 'tips' AS tips,
  204.     dj -> 'order' -> 'request' -> 'requirements' ->> 'childchair_moscow' AS child_chair,
  205.     (dj -> 'order' -> 'request' -> 'requirements' ->> 'ski')::BOOLEAN AS ski,
  206.     (dj -> 'order' -> 'request' -> 'requirements' ->> 'animaltransport')::BOOLEAN AS animals
  207. FROM orders
  208. )
  209.  
  210. SELECT
  211.     DATE_TRUNC('day', created) AS DAY,
  212.     city,
  213.     avg(date_part('minute', waiting_time - cr_time) * 60 + date_part('second', waiting_time - cr_time)) as avg_waiting_time
  214. FROM
  215.     parsed_orders
  216. WHERE
  217.     parsed_orders.child_chair IS NOT NULL and waiting_status = 'waiting'
  218. GROUP BY
  219.     DAY, city;
  220.  
  221.  
  222.  
  223. -------------------------------------------------------------
  224. ----- чаевые ------------------------------------------------
  225.  
  226. -- средняя величина чаевых
  227. WITH orders AS (
  228.     SELECT
  229.         doc::json AS dj
  230.     FROM common.order_proc_rotax
  231.     LIMIT 10000
  232. ),
  233. parsed_orders AS (
  234.     SELECT
  235.         dj -> 'order' ->> 'application' AS app,
  236.         dj -> 'order' -> 'creditcard' -> 'tips' ->> 'type' as tips_type,
  237.         (dj -> 'order' -> 'creditcard' -> 'tips' ->> 'value')::decimal as tips_value,
  238.         (dj -> 'order' ->> 'cost')::DECIMAL AS cost,
  239.         (dj ->> 'created')::TIMESTAMP AS created_dttm,
  240.         dj -> 'order' ->> 'city' AS city
  241.     FROM orders
  242. )
  243. SELECT
  244.        city,
  245.        app,
  246.        tips_type,
  247.        avg(tips_value),
  248.        date_trunc('day', created_dttm) as day
  249. FROM parsed_orders
  250. where tips_type is not null and tips_value > 0
  251. GROUP BY city, day, tips_type, app
  252. ORDER BY city, app;
  253.  
  254. -- сколько людей оставили чаевые и сколько не оставили
  255. WITH orders AS (
  256.     SELECT
  257.         doc::json AS dj
  258.     FROM common.order_proc_rotax
  259.     LIMIT 10000
  260. ),
  261. parsed_orders AS (
  262.     SELECT
  263.         dj -> 'order' ->> 'application' AS app,
  264.         dj -> 'order' -> 'creditcard' -> 'tips' ->> 'type' as tips_type,
  265.         (dj -> 'order' -> 'creditcard' -> 'tips' ->> 'value')::decimal as tips_value,
  266.         (dj -> 'order' ->> 'cost')::DECIMAL AS cost,
  267.         (dj ->> 'created')::TIMESTAMP AS created_dttm,
  268.         dj -> 'order' ->> 'city' AS city
  269.     FROM orders
  270. )
  271. SELECT
  272.        city,
  273.        app,
  274.        count(app),
  275.        tips_value > 0 as tips_exist,
  276.     date_trunc('day', created_dttm) as day
  277. FROM parsed_orders
  278. where tips_type is not null
  279. GROUP BY city, day, app, tips_exist
  280. ORDER BY city, day
  281.  
  282.  
  283. -------------------------------------------------------------
  284. ----- клиенты с Я.плюсом ------------------------------------
  285. WITH orders AS (
  286.     SELECT
  287.         doc::json AS dj
  288.     FROM common.order_proc_rotax
  289.     LIMIT 100000
  290. ),
  291. parsed_orders AS (
  292.     SELECT
  293.         (dj -> 'order' ->> 'cost')::DECIMAL AS cost,
  294.         (dj -> 'order' ->> 'calc_total')::DECIMAL AS calc_total,
  295.         (dj ->> 'created')::TIMESTAMP AS created_dttm,
  296.         dj -> 'order' -> 'price_modifiers' -> 'items' -> 0 ->> 'reason' as ya_plus
  297.     FROM orders
  298. )
  299.  
  300. SELECT
  301.     date_trunc('day', created_dttm) as day, count(ya_plus) as ya_plus_total
  302. FROM parsed_orders
  303. where ya_plus = ya_plus
  304. group by day
  305. order by day
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement