[TIL 01/17_์‚ฌ์ „์บ ํ”„ 5์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•

2025. 1. 17. 17:45ยทToday I Learned

ใ€€์˜ค๋Š˜ ํ•™์Šต ์š”์•ฝใ€€

1. ๊ฐœ์ธ ๊ณต๋ถ€

  • ์—‘์…€๋ณด๋‹ค ์‰ฝ๊ณ  ๋น ๋ฅธ SQL 3์ฃผ์ฐจ, 4์ฃผ์ฐจ ๊ฐ•์˜ ์ˆ˜๊ฐ•
    • 3-4. ์กฐ๊ฑด์— ๋”ฐ๋ผ ํฌ๋งท์„ ๋‹ค๋ฅด๊ฒŒ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๋ฉด (IF, CASE)
    • 3-5. [์‹ค์Šต] SQL๋กœ ๊ฐ„๋‹จํ•œ USer Segmentation ํ•ด๋ณด๊ธฐ
    • 3-6. [์‹ค์Šต] ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์‹์„ ์ ์šฉํ•œ ์ˆ˜์ˆ˜๋ฃŒ ๊ตฌํ•ด๋ณด๊ธฐ
    • 3-7. SQL๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์™œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋‚˜์š”
    • 4-1. ํฌ๋งท ๋ณ€๊ฒฝ๊ณผ ์กฐ๊ฑด๋ฌธ ๋ณต์Šตํ•˜๊ณ , ์ด๋ฒˆ ์ˆ˜์—… ๋‚ด์šฉ ๋ง›๋ณด๊ธฐ
    • 4-2. ์—ฌ๋Ÿฌ๋ฒˆ์˜ ์—ฐ์‚ฐ์„ ํ•œ ๋ฒˆ์˜ SQL๋ฌธ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ
    • 4-3. [์‹ค์Šต] User Segmentation ์™€ ์กฐ๊ฑด๋ณ„ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ Subquery๋กœ ๊ฒฐํ•ฉํ•ด๋ณด๊ธฐ
    • 4-4. [์‹ค์Šต] ๋ณต์žกํ•œ ์—ฐ์‚ฐ์„ Subquery๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ

ใ€€ํ•™์Šต ๋‚ด์šฉ ์ •๋ฆฌใ€€

1. ์—‘์…€๋ณด๋‹ค ์‰ฝ๊ณ  ๋น ๋ฅธ SQL 3์ฃผ์ฐจ ๊ฐ•์˜ ์ˆ˜๊ฐ•

  • ์กฐ๊ฑด์— ๋”ฐ๋ผ ํฌ๋งท์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•
    • โ‘  IF(์กฐ๊ฑด, ์กฐ๊ฑด์„ ์ถฉ์กฑํ•  ๋•Œ, ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•  ๋•Œ)
    • โ‘ก CASE when ์กฐ๊ฑด1 then ๊ฐ’(์ˆ˜์‹)1
                      when ์กฐ๊ฑด2 then ๊ฐ’(์ˆ˜์‹)2 ...
                      else ๊ฐ’(์ˆ˜์‹) end 
      ใ€€ใ€€- ์กฐ๊ฑด์ด 2๊ฐœ์ด์ƒ์ผ ๊ฒฝ์šฐ์—๋Š” case๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.(์กฐ๊ฑด ๊ฐœ์ˆ˜ ์ œํ•œ ์—†์Œ)
      ใ€€ใ€€- ์กฐ๊ฑด1, ์กฐ๊ฑด2 ์™ธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด else ์ƒ๋žต ๊ฐ€๋Šฅ
      ใ€€ใ€€- case๋กœ ์‹œ์ž‘ํ•ด์„œ end๋กœ ๋๋‚ธ๋‹ค.
      ใ€€ใ€€- when ์กฐ๊ฑด์„ ๋‚˜์—ดํ• ๋•Œ ์œ„์—์„œ ๋ถ€ํ„ฐ ํ•ด๋‹น๋˜๋Š” ์กฐ๊ฑด์€ ๊ฑธ๋Ÿฌ์ง„๋‹ค.
      ใ€€ใ€€- then ๋’ค์— ๊ฐ’ ํ˜น์€ if๋ฌธ๊ณผ ๊ฐ™์€ ์ˆ˜์‹๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.
select case when score>=90 then 'A'
			when score>=80 then 'B'
            when score>=70 then 'C'
            else 'D' end       
#์œ„ ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋‘๋ฒˆ์งธ ์กฐ๊ฑด์—์„œ ์ด๋ฏธ scroe>=90์˜ ๋ฐ์ดํ„ฐ๋Š” ํ•„ํ„ฐ๋ง๋๋‹ค.
#์ฆ‰ B์˜ ๊ฐ’์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋Š” score<90 and score>=80๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
    • ์ƒˆ๋กœ์šด ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋งŒ๋“ค๋•Œ (์กฐ๊ฑด์— ๋”ฐ๋ฅธ ๊ทธ๋ฃนํ™”)
    • ์กฐ๊ฑด๋ณ„๋กœ ๋‹ค๋ฅธ ์—ฐ์‚ฐ ์กฐ๊ฑด์„ ์ง€์ •ํ•  ๋•Œ
    • ๋‹ค๋ฅธ ๋ฌธ๋ฒ• ์•ˆ์—์„œ ์ ์šฉํ•  ๋•Œ
  • 3-5๊ฐ• ์‹ค์Šต
#๋‚ด๊ฐ€ ์“ด ์‹ 
select case when age<20 and gender='male' then '10๋Œ€ ๋‚จ์„ฑ'
			when age>=20 and gender='male' then '20๋Œ€ ๋‚จ์„ฑ'
			when age<20 and gender='female' then '10๋Œ€ ์—ฌ์„ฑ'
			when age>=20 and gender='female' then '20๋Œ€ ์—ฌ์„ฑ'
			end "๊ตฌ๋ถ„", name,
			age, gender		
from customers
where age between 10 and 30

#์ •๋‹ต(๊ฐ•์˜์—์„œ ์ œ๊ณตํ•œ ๋‹ต)
select case when (age between 10 and 19) and gender='male' then '10๋Œ€ ๋‚จ์„ฑ'
			when (age between 10 and 19) and gender='female' then '10๋Œ€ ์—ฌ์„ฑ'
			when (age between 20 and 29) and gender='male' then '20๋Œ€ ๋‚จ์„ฑ'
			when (age between 20 and 29) and gender='female' then '20๋Œ€ ์—ฌ์„ฑ' end "๊ณ ๊ฐ ๋ถ„๋ฅ˜",
			name,
			age,
			gender
from customers
where age between 10 and 29

#์˜ค๋‹ต๋…ธํŠธ
	where์ ˆ์— between ๋ฒ”์œ„ ์ž˜๋ชป ์ง€์ •
  • Data Type์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜
    • SQL๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ 'data type'์ด๋ผ๋Š” ๋‹จ์–ด์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋ฌธ์žํ˜•์ธ๋ฐ ์ˆซ์ž๋กœ ์˜คํŒ๋‹จํ•˜๊ณ  ์—ฐ์‚ฐ์„ ์ ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ด๋‹ค.
    • ๋ณด๊ธฐ์—๋Š” 1,2,3๊ณผ ๊ฐ™์€ ์ˆซ์ž์—ฌ๋„ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋ฌธ์žํ˜•์ผ ์ˆ˜ ์žˆ๋‹ค. (๋ฐ์ดํ„ฐ ํƒ€์ž… ํ™•์ธ ํ•„์š”)
    • dbeaver์—์„œ๋Š” ์ปฌ๋Ÿผ ์ขŒ์ธก์— a-z๋˜๋Š” 123์œผ๋กœ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ํ‘œ๊ธฐ๋˜์–ด์žˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ• : Cast(์ปฌ๋Ÿผ as ๋ฌธ์žํ˜•์‹)
      • ์ปฌ๋Ÿผ์— ํฌํ•จ๋œ ๊ธ€์ž๋ฅผ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝ
        Cast(if(์ปฌ๋Ÿผ='๊ธ€์ž', '1(์ž„์˜์˜ ์ˆซ์ž)', ์ปฌ๋Ÿผ) as decimal)
      • ์ˆซ์ž๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ
        Cast(์ปฌ๋Ÿผ as char)

2. ์—‘์…€๋ณด๋‹ค ์‰ฝ๊ณ  ๋น ๋ฅธ SQL 4์ฃผ์ฐจ ๊ฐ•์˜ ์ˆ˜๊ฐ•

  • Subquery()
    • ์šฉ๋„
      ใ€€ใ€€- ์—ฌ๋Ÿฌ๋ฒˆ์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ
      ใ€€ใ€€- ์กฐ๊ฑด๋ฌธ์— ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ
      ใ€€ใ€€- ์กฐ๊ฑด์— Query ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ
    • select column1, special_column
      from
          ( /* subquery */
          select column1, column2 special_column
          from table1
          ) a
    • ์ˆ˜์‹์œผ๋กœ ๋ณด๋ฉด ์–ด๋ ต์ง€๋งŒ, from ๋’ค์— ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์„œ, ์ƒ์œ„ ์ฟผ๋ฆฌ์— ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
    • a์™€ ๊ฐ™์ด ๋ณ„์นญ์„ ๋ถ™์ด๋Š” ๊ฒƒ์ด ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถ™์ด๋Š” ๊ฑธ ๊ถŒ์žฅํ•œ๋‹ค.
      ์™œ๋ƒํ•˜๋ฉด SQL ๋ฌธ๋ฒ•์—์„œ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์„ ์ง€์ •ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
      ๋ณ„์นญ์„ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด ์ผ๋ถ€ DBMS์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. (a์™€ ๊ฐ™์€ ์ž„์˜์˜ ๋ณ„์นญ์„ ๋ถ™์—ฌ๋†“์ž!)
#๋‚ด๊ฐ€ ์“ด ์‹ 
select restaurant_name,
	   order_total,
	   price_total,
	   case when order_total <= 5 then 0.1
	   		when order_total > 15 and price_total >= 30000 then 0.005
	   		else 0.01 end rate
from
(select restaurant_name,
	   count(quantity) order_total,
	   sum(price) price_total
from food_orders
group by 1) a

#์ •๋‹ต(๊ฐ•์˜์—์„œ ์ œ๊ณตํ•œ ๋‹ต)
select restaurant_name,
	   sum_price,
	   sum_quantity,	   
	   case when sum_quantity <= 5 then 0.1
	   		when sum_quantity > 15 and sum_price >= 300000 then 0.005
	   		else 0.01 end rate
from
(select restaurant_name,
	   sum(price) sum_price,
	   sum(quantity) sum_quantity
from food_orders
group by 1) a


#์˜ค๋‹ต๋…ธํŠธ
1.๋ฌธ์ œ๋Š” ์Œ์‹์ ์˜ ์ด ์ฃผ๋ฌธ์ˆ˜๋Ÿ‰๊ณผ ์ฃผ๋ฌธ ๊ธˆ์•ก์„ ์—ฐ์‚ฐํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋Š”๋ฐ,
  ์ฃผ๋ฌธ์ˆ˜๋Ÿ‰์„ ๊ณ„์‚ฐํ•  ๋•Œ sum()์ด ์•„๋‹Œ count()๋กœ ์ง‘๊ณ„ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๋ถ€๋ฅผ ๋ˆ„๋ฝ์‹œํ‚ด...
2.์ˆซ์ž๋„ 300,000 ์ด์ƒ์ธ๋ฐ 30,000์œผ๋กœ ์ž˜๋ชป ์ ์—ˆ๋‹ค..

 


ใ€€๋ฉ”๋ชจใ€€

1. between๋ฒ”์œ„ ์ฃผ์˜ํ•˜๊ธฐ

ใ€€-  between 1 AND 30์ผ ๊ฒฝ์šฐ 1.0๋ถ€ํ„ฐ 30.0๊นŒ์ง€ ํฌํ•จํ•œ๋‹ค.  ใ€€-  20๋Œ€๋ฅผ ํ•„ํ„ฐ๋งํ•œ๋‹ค๋ฉด between 20 AND 29๋กœ ์ง€์ •ํ•ด์•ผํ•œ๋‹ค.

2. count()์™€ sum() ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๊ธฐ, ์กฐ๊ฑด ์ž˜ ์ฝ๊ณ  ์ˆซ์ž ์‹ค์ˆ˜ํ•˜์ง€ ์•Š๊ธฐ

ใ€€-  ๋ฌธ์ œ๋ฅผ ์ž˜ ์ฝ๊ณ  ์ฃผ์˜ํ•˜์ž! 

3. 1on1 ์ง„ํ–‰ํ–ˆ๋‹ค. ์ฒซ๋ฒˆ์งธ๋กœ!!  


ใ€€๋‹ค์Œ ๊ณต๋ถ€ ๊ณ„ํšใ€€

1. 5์ฃผ์ฐจ ๊ฐ•์˜ ์ง„์งœ์ง„์งœ ๋งˆ๋ฌด๋ฆฌ

'Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL 01/21_์‚ฌ์ „์บ ํ”„ 7์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•  (0) 2025.01.21
[TIL 01/20_์‚ฌ์ „์บ ํ”„ 6์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•  (0) 2025.01.20
[TIL 01/16_์‚ฌ์ „์บ ํ”„ 4์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•  (0) 2025.01.16
[TIL 01/15_์‚ฌ์ „์บ ํ”„ 3์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•  (0) 2025.01.15
[TIL 01/14_์‚ฌ์ „์บ ํ”„ 2์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•  (1) 2025.01.14
'Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [TIL 01/21_์‚ฌ์ „์บ ํ”„ 7์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•
  • [TIL 01/20_์‚ฌ์ „์บ ํ”„ 6์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•
  • [TIL 01/16_์‚ฌ์ „์บ ํ”„ 4์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•
  • [TIL 01/15_์‚ฌ์ „์บ ํ”„ 3์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•
aggeeeee
aggeeeee
ใ€€ φ(๏ผŽ๏ผŽ;)ใ€€๐Ÿ”œใ€€\_ใธ(โ–ญ-โ–ญ)โœจ
  • aggeeeee
    ๐Ÿฅ” ๋‹˜์˜ ๋ธ”๋กœ๊ทธ
    aggeeeee
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (155)
      • Today I Learned (25)
      • ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ (115)
        • ๋ณธ์บ ํ”„ ๊ณผ์ œ (17)
        • ์‚ฌ์ „์บ ํ”„ ๊ณผ์ œ (23)
        • SQL ์ฝ”๋“œ์นดํƒ€ (44)
        • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ์นดํƒ€ (31)
      • ๐Ÿ’ป๐Ÿš€ (15)
        • Java (7)
        • Git & GitHub (1)
        • CS (4)
        • Spring & SpringBoot (3)
  • ๋งํฌ

  • ์ตœ๊ทผ ๊ธ€

  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
aggeeeee
[TIL 01/17_์‚ฌ์ „์บ ํ”„ 5์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”