๐Ÿ“’ SQL - ๋ฌธ์ œํ’€์ด Day2

Kimdongkiยท2024๋…„ 7์›” 2์ผ

DB

๋ชฉ๋ก ๋ณด๊ธฐ
33/33

๐Ÿ“™ ์‡ผํ•‘๋ชฐ์˜ ์ผ์ผ ๋งค์ถœ์•ก๊ณผ ARPPU

  • dt - ๋งค์ถœ ๋‚ ์งœ (์˜ˆ: 2018-01-01)

  • pu - ๊ฒฐ์ œ ๊ณ ๊ฐ ์ˆ˜

  • revenue_daily - ํ•ด๋‹น ๋‚ ์งœ์˜ ๋งค์ถœ์•ก

  • arppu - ๊ฒฐ์ œ ๊ณ ๊ฐ 1์ธ ๋‹น ํ‰๊ท  ๊ฒฐ์ œ ๊ธˆ์•ก

  • ์ฃผ์˜ํ•  ์ ์€ ์ฃผ๋ฌธ ๊ณ ๊ฐ์ด ํ•ด๋‹น ๋‚ ์งœ์— ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. -> DISTINCT ์‚ฌ์šฉํ•ด์•ผํ•จ

SELECT
  DATE(a.order_purchase_timestamp) dt,
  COUNT(DISTINCT a.customer_id) pu,
  SUM(payment_value) revenue_daily,
  ROUND(SUM(payment_value)/COUNT(DISTINCT a.customer_id), 2) arppu
FROM olist_orders_dataset a
JOIN olist_order_payments_dataset b ON a.order_id = b.order_id
WHERE dt >= '2018-01-01'
GROUP BY dt
ORDER BY dt

๐Ÿ“™ ๋ฉ˜ํ† ๋ง ์ง๊ฟ ๋ฆฌ์ŠคํŠธ

  • mentee : โ€˜2021๋…„ 12์›” 31์ผโ€™์„ ๊ธฐ์ค€์œผ๋กœ 3๊ฐœ์›” ์ด๋‚ด
  • mentor : โ€˜2021๋…„ 12์›” 31์ผโ€™์„ ๊ธฐ์ค€์œผ๋กœ ์žฌ์งํ•œ์ง€ 2๋…„ ์ด์ƒ
SELECT 
    mentee.employee_id AS mentee_id,
    mentee.name AS mentee_name,
    mentor.employee_id AS mentor_id,
    mentor.name AS mentor_name
FROM 
    (
      SELECT employee_id, name, department
      FROM employees
      WHERE join_date BETWEEN '2021-10-01' AND '2022-03-31'
    ) AS mentee
LEFT JOIN 
    (
      SELECT employee_id, name, department
      FROM employees
      WHERE join_date <= '2019-12-31'
    ) AS mentor
ON mentee.department != mentor.department
ORDER BY mentee_id ASC, mentor_id ASC

๐Ÿ“™ ๊ฐ€๊ตฌ ํŒ๋งค์˜ ๋น„์ค‘์ด ๋†’์•˜๋˜ ๋‚  ์ฐพ๊ธฐ

  • order_date - ์ฃผ๋ฌธ ๋‚ ์งœ
  • furniture - ํ•ด๋‹น ์ผ์˜ Furniture ์นดํ…Œ๊ณ ๋ฆฌ ์ฃผ๋ฌธ ์ˆ˜
  • furniture_pct - ํ•ด๋‹น ์ผ์˜ ์ „์ฒด ์ฃผ๋ฌธ ๋Œ€๋น„ Furniture ์นดํ…Œ๊ณ ๋ฆฌ ์ฃผ๋ฌธ์˜ ๋น„์œจ (%)
  • Furniture ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ฃผ๋ฌธ ๋น„์œจ์€ ๋ฐฑ๋ถ„์œจ๋กœ ๊ณ„์‚ฐํ•˜๋ฉฐ, ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ์†Œ์ˆ˜์  ๋‘˜์งธ์ž๋ฆฌ๊นŒ์ง€๋งŒ ์ถœ๋ ฅ
  • Furniture ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ฃผ๋ฌธ ๋น„์œจ์ด ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ ๋ณด์—ฌ์ฃผ๋„๋ก ์ •๋ ฌํ•˜๊ณ , ๋น„์œจ์ด ๊ฐ™๋‹ค๋ฉด ๋‚ ์งœ ์ˆœ์œผ๋กœ ์ •๋ ฌ
SELECT
  order_date,
  COUNT(DISTINCT(CASE WHEN category='Furniture' THEN order_id END)) AS furniture,
  ROUND((COUNT (DISTINCT(CASE WHEN category='Furniture' THEN order_id END))+0.00) / (COUNT(DISTINCT(order_id))+0.00)*100, 2) AS furniture_pct
FROM records
GROUP BY order_date
HAVING COUNT(DISTINCT order_id) >= 10 AND furniture_pct>= 40
ORDER BY furniture_pct DESC;
WITH order_counts AS (
  SELECT
    order_date,
    COUNT(DISTINCT order_id) AS total_orders,
    COUNT(DISTINCT CASE WHEN category = 'Furniture' THEN order_id END) AS furniture_orders
  FROM records
  GROUP BY order_date
)
SELECT
  order_date,
  furniture_orders AS furniture,
  ROUND(furniture_orders * 100.0 / total_orders, 2) AS furniture_pct
FROM order_counts
WHERE total_orders >= 10
  AND (furniture_orders * 100.0 / total_orders) >= 40
ORDER BY furniture_pct DESC;

0๊ฐœ์˜ ๋Œ“๊ธ€