MrlenRae

task1_SQLpromocodes

Jun 24th, 2021 (edited)
361
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ---ЗАДАНИЕ №1 (SQL-запрос)
  2. /*Исходные данные:
  3. Таблица 1. orders (order_id, promocode_id) - уникальные заказы
  4. Таблица 2. promocodes (promocode_id, name, discount) - уникальные промокоды
  5. Необходимо вывести:
  6. 1) Долю заказов с промокодами;
  7. 2) Самый популярный промокод (название) и число его использований.*/
  8.  
  9.  
  10. ---РЕШЕНИЕ: (PostgreSQL)
  11. /*Запрос #1: Доля заказов с промокодами.
  12. Исходим из логики, что в поле promocode_id либо значение есть, либо его нет - NULL.*/
  13. SELECT
  14.     (COUNT(promocode_id) / COUNT(DISTINCT order_id)::REAL)::NUMERIC(4, 3) * 100 AS ratio_orders_with_promocodes
  15. FROM
  16.     orders;
  17.  
  18. /*Запрос #2: Самый популярный промокод (название) и число его использований.*/
  19. SELECT
  20.     name AS promocode_name,
  21.     cnt_uses_promocode
  22. FROM
  23.     promocodes
  24.     RIGHT JOIN (
  25.         SELECT
  26.             promocode_id,
  27.             COUNT(promocode_id) AS cnt_uses_promocode
  28.         FROM
  29.             orders
  30.         WHERE
  31.             promocode_id IS NOT NULL
  32.         GROUP BY
  33.             promocode_id
  34.     ) AS subq_orders ON promocodes.promocode_id = subq_orders.promocode_id
  35. ORDER BY
  36.     cnt_uses_promocode DESC
  37. LIMIT 1;
RAW Paste Data