SQL 14

[SQL] ๐Ÿ“Œ ์ค‘์•™๊ฐ’ ๊ตฌํ•˜๊ธฐ | median ํ•จ์ˆ˜ ์—†์ด ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• | ํ™œ์šฉ ์˜ˆ์ œ

์ค‘์•™๊ฐ’ ๊ตฌํ•˜๊ธฐ ์ค‘์•™๊ฐ’(median)์€ ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ–ˆ์„ ๋•Œ, ์ค‘์•™์— ์œ„์น˜ํ•œ ๊ฐ’์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋กœ, ํŠนํžˆ ๊ทน๋‹จ์ ์ธ ์ด์ƒ์น˜์— ์˜ํ–ฅ์„ ๋œ ๋ฐ›๋Š” ํŠน์ง•์ด ์žˆ์–ด ํ‰๊ท ๋ณด๋‹ค ๋” ์•ˆ์ •์ ์ธ ์ง€ํ‘œ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ค‘์•™๊ฐ’ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•:ํ™€์ˆ˜ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ:→ ๊ฐ€์šด๋ฐ ์žˆ๋Š” ๊ฐ’์ด ์ค‘์•™๊ฐ’์ž…๋‹ˆ๋‹ค.์˜ˆ: 3, 5, 7 → ์ค‘์•™๊ฐ’์€ 5์ง์ˆ˜ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ:→ ๊ฐ€์šด๋ฐ ๋‘ ๊ฐ’์˜ ํ‰๊ท ์ด ์ค‘์•™๊ฐ’์ž…๋‹ˆ๋‹ค.์˜ˆ: 2, 4, 6, 8 → ์ค‘์•™๊ฐ’์€ (4+6)/2 = 5์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€/์ง์ธ์ง€์— ๋”ฐ๋ผ ์ค‘์•™๊ฐ’์˜ ์œ„์น˜์™€ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์—์ด๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ SQL ์ฟผ๋ฆฌ๋ฅผ ์งœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.MySQL์€ median์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„์˜ ์•„์ด๋””์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์šฉ ์˜ˆ์ œ ..

Tools/- SQL 2025.05.10

[Yammer/Mode] A/B ํ…Œ์ŠคํŠธ ๋ถ„์„ : 2๏ธโƒฃ ๋žœ๋ค ์ƒ˜ํ”Œ๋ง

[Yammer/Mode] A/B ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๊ฒ€์ฆ : 1๏ธโƒฃ SQL ์ฟผ๋ฆฌ ๋œฏ์–ด๋ณด๊ธฐYammer ๋ถ„์„ ํ”„๋กœ์ ํŠธ"์•ผ๋จธ(Yammer)"๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์‚ฐํ•˜์˜ ๊ธฐ์—…์šฉ ์†Œ์…œ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ํšŒ์‚ฌ์ž…๋‹ˆ๋‹ค. Mode์—์„œ ๊ฐ€์ƒ์˜ ์•ผ๋จธ์‚ฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ˜„์—…๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ์ œ ์ƒํ™ฉ์„syimmin-data-analysis.tistory.com ์ด์ „ ๊ธ€์„ ํ†ตํ•ด Yammer์‚ฌ์—์„œ ์ง„ํ–‰ํ•œ ์ƒˆ๋กœ์šด ํฌ์ŠคํŒ… ๊ธฐ๋Šฅ์˜ A/B test์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.SQL์„ ๋œฏ์–ด๋ณด๋Š” ๊ณผ์ •์—์„œ ์–ด๋–ค ์˜ค๋ฅ˜์™€ ํŽธํ–ฅ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ถ”์ธกํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”,์˜ค๋Š˜์€ A/B test์˜ ์ƒ˜ํ”Œ์— ๋Œ€ํ•ด์„œ ์ƒ˜ํ”Œ๋ง์—์„œ ์™ธ๋ถ€ ๋ณ€์ˆ˜๊ฐ€ ์ž˜ ํ†ต์ œ๋˜์—ˆ๋Š”์ง€, ์ฆ‰ Random Sampling (๋ฌด์ž‘์œ„ ์ถ”์ถœ)์ด ์ž˜ ์ด๋ฃจ์–ด์กŒ๋Š”์ง€๊ทธ๋ฆฌ๊ณ  ๊ฐ€์„ค์ด ํ†ต๊ณ„์ ์œผ๋กœ ์œ ์˜๋ฏธํ•˜๊ธฐ ์œ„ํ•ด ์ƒ˜ํ”Œ..

[Yammer/Mode] A/B ํ…Œ์ŠคํŠธ ๋ถ„์„ : 1๏ธโƒฃ SQL ์ฟผ๋ฆฌ ๋œฏ์–ด๋ณด๊ธฐ

Yammer ๋ถ„์„ ํ”„๋กœ์ ํŠธ"์•ผ๋จธ(Yammer)"๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์‚ฐํ•˜์˜ ๊ธฐ์—…์šฉ ์†Œ์…œ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ํšŒ์‚ฌ์ž…๋‹ˆ๋‹ค. Mode์—์„œ ๊ฐ€์ƒ์˜ ์•ผ๋จธ์‚ฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ˜„์—…๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ์ œ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. A/B test ์ƒํ™ฉ์•ผ๋จธ์‚ฌ์—์„œ ์ƒˆ๋กœ์šด ํฌ์ŠคํŒ…(publisher) ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด A/B test๋ฅผ 6์›” 1์ผ๋ถ€ํ„ฐ 6์›” 30์ผ๊นŒ์ง€ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.์•ผ๋จธ์‚ฌ์— ๋กœ๊ทธ์ธํ•œ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋“ค์€ ๊ธฐ์กด ๋ฒ„์ „(๋Œ€์กฐ๊ตฐ)์„ ๋ณด์•˜๊ณ , ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์€ ์ƒˆ๋กœ์šด ๋ฒ„์ „(์‹คํ—˜๊ตฐ)์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.7์›” 1์ผ A/B ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•œ ๊ฒฐ๊ณผ, ์‹คํ—˜๊ตฐ์ด ๋Œ€์กฐ๊ตฐ ๋Œ€๋น„ ํฌ์ŠคํŒ… ๊ฐœ์ˆ˜๊ฐ€ 50% ๋” ๋†’๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒŒ์‹œ ํ™œ๋™์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. โญ๏ธ ์ด๋ฒˆ ๊ธ€์„ ํ†ตํ•ด ์•ผ๋จธ์‚ฌ์—์„œ ์ง„ํ–‰..

[SQL] ๐Ÿ“Œ recursive (์žฌ๊ท€์ฟผ๋ฆฌ) ์•Œ์•„๋ณด๊ธฐ | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์˜ˆ์ œ | ๋ฉธ์ข…์œ„๊ธฐ์˜ ๋Œ€์žฅ๊ท  ์ฐพ๊ธฐ | level 5

์žฌ๊ท€์ฟผ๋ฆฌ(recursive)๋ž€?์žฌ๊ท€ํ•จ์ˆ˜๋ž€ ํ•จ์ˆ˜ ์•ˆ์— ์ž์‹ ์˜ ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ๋กœ์ง์„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€, ์ผ์ •ํ•œ ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด ํ•จ์ˆ˜๋ฅผ ์ดํƒˆํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•œ๋‹ค.  ์žฌ๊ท€์ฟผ๋ฆฌ(recursive) ๋ฌธ๋ฒ•WITH RECURSIVE ๋ฌธ1. with๋ฌธ :โˆ™ ์žฌ๊ท€์ฟผ๋ฆฌ๋Š” ๊ผญ with๋ฌธ ์•ˆ์— ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.โˆ™ ์ผ๋ฐ˜ with๋ฌธ๊ณผ ๋‹ค๋ฅด๊ฒŒ cte์•ž์— 'recursive'๋ฅผ ์ ์–ด์ค˜์•ผ ํ•œ๋‹ค  ( ex: with recursive cte as )2. ๋น„๋ฐ˜๋ณต๋ฌธ (Non-Recursive) select ๋ฌธ :โˆ™์žฌ๊ท€์ฟผ๋ฆฌ์˜ ์ผ์ข…์˜ root์„ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•œ๋‹ค.  ( i = i + 1์„ ๋ฐ˜๋ณตํ•  ๋•Œ, root๋กœ i = 1์„ ์‹ฌ์–ด์ฃผ๋Š” ๊ฒƒ )3. union allโˆ™ root์™€ ๋ฐ˜๋ณตํ•  ์ฟผ๋ฆฌ๋ฅผ ํ•ฉ์ณ์ค€๋‹ค.4. ๋ฐ˜๋ณต๋ฌธ ..

Tools/- SQL 2025.03.06

[SQL] ๐Ÿ“Œ ์ฝ”ํ˜ธํŠธ ๋ถ„์„ - ๋ฆฌํ…์…˜ ์•Œ์•„๋ณด๊ธฐ | Kaggle ์ด์ปค๋จธ์Šค ๋ฐ์ดํ„ฐ ํ™œ์šฉ ์˜ˆ์ œ

Cohort Analysis (์ฝ”ํ˜ธํŠธ ๋ถ„์„) Cohort๋Š” '๋™์งˆ์ง‘๋‹จ'์ด๋ผ๋Š” ๋œป์ด๋‹ค.Cohort ๋ถ„์„์€ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž ์ง‘๋‹จ(์ฝ”ํ˜ธํŠธ)์˜ ํ–‰๋™ ๋ณ€ํ™”๋ฅผ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ถ„์„ํ•˜์—ฌ ํŠธ๋ Œ๋“œ์™€ ํŒจํ„ด์„ ํŒŒ์•…ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ํ”Œ๋žซํผ์˜ ์‚ฌ์šฉ์ž๋“ค์ด ์„œ๋น„์Šค๋ฅผ ์–ด๋–ค ๋น„์œจ๋กœ ์žฌ๋ฐฉ๋ฌธ/์žฌ๊ตฌ๋งคํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ์ฆ‰ ์‚ฌ์šฉ์ž์˜ ๋ฆฌํ…์…˜์„ ํŒŒ์•…ํ•˜๊ณ ์ž ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.๋ณดํ†ต ์›”(monthly) ๋˜๋Š” ์ฃผ(weekly) ๋‹จ์œ„๋กœ ๋ฆฌํ…์…˜์„ ํ™•์ธํ•œ๋‹ค. Data ์ค€๋น„๋ฐ์ดํ„ฐ๋Š” ์บ๊ธ€์˜ ์˜จ๋ผ์ธ ์„ธ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. https://www.kaggle.com/datasets/jihyeseo/online-retail-data-set-from-uci-ml-repo Online Retail Data Set from UCI ML repo..

[SQL] solvesql | ๋ฐฐ์†ก ์˜ˆ์ •์ผ ์˜ˆ์ธก ์„ฑ๊ณต๊ณผ ์‹คํŒจ

๋ฌธ์ œhttps://solvesql.com/problems/estimated-delivery-date/ https://solvesql.com/problems/estimated-delivery-date/ solvesql.com ์ฝ”๋“œ๋‚˜์˜ ๋‹ต์•ˆ .. (์™ค์ผ€ ๋ณต์žกํ•˜๊ฒŒ ํ’€์—ˆ์ง€ ??)select purchase_date, (count(distinct order_id) - sum(mrk)) as success, sum(mrk) as failfrom (SELECT order_id, date(order_purchase_timestamp) as purchase_date, case when order_delivered_customer_date  ๊น”๋”ํ•œ ํƒ€ ๋ธ”๋กœ๊ทธ ํ’€์ดselect date(order_purcha..

Tools/- SQL 2025.02.14

[SQL] solvesql | ์‡ผํ•‘๋ชฐ์˜ ์ผ์ผ ๋งค์ถœ์•ก๊ณผ ARPPU

๋ฌธ์ œhttps://solvesql.com/problems/daily-arppu/ https://solvesql.com/problems/daily-arppu/ solvesql.com ์ฝ”๋“œselect date(o.order_purchase_timestamp) as dt, count(distinct o.order_id) as pu, sum(p.payment_value) as revenue_daily, round(sum(p.payment_value) / count(distinct o.order_id), 2) as arppu from olist_orders_dataset as ojoin olist_order_payments_dataset as p on o.order_id = p.order_idwhere..

Tools/- SQL 2025.02.14

[SQL] solvesql | ์„ธ ๋ช…์ด ์„œ๋กœ ์นœ๊ตฌ์ธ ๊ด€๊ณ„ ์ฐพ๊ธฐ | self join ํ™œ์šฉํ•˜๊ธฐ, on์ ˆ ์กฐ๊ฑด ์—ฌ๋Ÿฌ๊ฐœ

๋ฌธ์ œhttps://solvesql.com/problems/friend-group-of-3/ https://solvesql.com/problems/friend-group-of-3/ solvesql.com ๋ฌธ์ œ๊ฐ€ ์ข€ ํŠน์ดํ•˜๋‹ค..!a - b ๊ฐ€ ์นœ๊ตฌ์ด๊ณ b - c ๊ฐ€ ์นœ๊ตฌ์ด๊ณ c - a ๊ฐ€ ์นœ๊ตฌ์ธ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค์ฐธ๊ณ ๋กœ a - b ์ธ ํ–‰์ด ์กด์žฌํ•˜๋ฉด b - a ์ธ ํ–‰์€ ์—†๋‹ค. ์ฆ‰, ์ค‘๋ณต ํ–‰์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฝ”๋“œ๋‚˜์˜ ๋‹ต์•ˆwith user_3 as (select a.user_a_id, a.user_b_id, case when a.user_b_id = b.user_a_id then b.user_b_id end as user_c_idfrom edges ajoin edges bon a.user_b_id ..

Tools/- SQL 2025.02.14

[MySQL] Case๋ฌธ | ๋ฌธ๋ฒ•๊ณผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ์‚ดํŽด๋ณด๊ธฐ

๐Ÿ“Œ Case๋ฌธ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ '๋‹ค์ค‘ ๋ถ„๊ธฐ' ๋ฌธ๋ฒ•์ด๋‹ค ์Šคํ† ์–ด๋“œ ํ”„๋กœ์‹œ์ €์—์„œ SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋ฌธ์—์„œ ํ™œ์šฉ SELECT ๋ฌธ์—์„œ CASE๋ฌธ์œผ๋กœ ๊ฐ’ ํ˜ธ์ถœ CASE WHEN ์กฐ๊ฑด1 THEN SET ๋ณ€์ˆ˜๊ฐ’ WHEN ์กฐ๊ฑด1 THEN SET ๋ณ€์ˆ˜๊ฐ’ WHEN ์กฐ๊ฑด1 THEN SET ๋ณ€์ˆ˜๊ฐ’ ELSE SET ๋ณ€์ˆ˜๊ฐ’ END CASE; โœ๏ธ SELECT๋ฌธ์—์„œ CASE๋ฌธ ํ™œ์šฉํ•ด์„œ ํšŒ์›๋“ฑ๊ธ‰ ๋ถ„๋ฅ˜ํ•˜๊ธฐ SELECT M.mem_id, M.mem_name, SUM(price*amount) "์ด๊ตฌ๋งค์•ก", CASE WHEN (SUM(price*amount) >= 1500) THEN '์ตœ์šฐ์ˆ˜๊ณ ๊ฐ' WHEN (SUM(price*amount) >= 1000) THEN '์šฐ์ˆ˜๊ณ ๊ฐ' WHEN (SUM(price*amount) >= ..

Tools/- SQL 2024.04.07

[SQL] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์˜ˆ์ œ | ๊ทธ๋ฃน๋ณ„ ์ตœ๋Œ€๊ฐ’ ๋ ˆ์ฝ”๋“œ ์ถœ๋ ฅ, ๊ทธ๋ฃน๋ณ„ ๋ ˆ์ฝ”๋“œ count | ์„œ๋ธŒ์ฟผ๋ฆฌ์™€ ์กฐ์ธ์˜ ์ฐจ์ด

โœ๏ธ ๋ฌผ๊ณ ๊ธฐ ์ข…๋ฅ˜ ๋ณ„ ๋Œ€์–ด ์ฐพ๊ธฐ : fish_type ๋ณ„๋กœ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ 1) ์„œ๋ธŒ์ฟผ๋ฆฌ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ SELECT ID, (SELECT FISH_NAME FROM FISH_NAME_INFO WHERE FISH_TYPE = a.FISH_TYPE) AS FISH_NAME, -- ๋‘๋ฒˆ์งธ ํ…Œ์ด๋ธ” ์„œ๋ธŒ์ฟผ๋ฆฌ LENGTH FROM FISH_INFO a WHERE LENGTH IN (SELECT MAX(LENGTH) FROM FISH_INFO GROUP BY FISH_TYPE) -- self ํ…Œ์ด๋ธ” ์„œ๋ธŒ์ฟผ๋ฆฌ ORDER BY ID where ์ ˆ์—์„œ fish_type ๋ณ„๋กœ max(length)์„ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ์ถ”์ถœํ•˜์—ฌ ์—ฐ์‚ฐ์ž in์œผ๋กœ ์ตœ๋Œ€๊ฐ’์„ ์ถฉ์กฑํ•˜๋Š” length์„ ๊ฒ€์ƒ‰ํ•˜๋„๋ก ํ•˜์˜€๋‹ค. 2) ์กฐ์ธ๋งŒ ์‚ฌ์šฉํ•˜..

Tools/- SQL 2024.03.15