[TIL]36. SQL ๋ณต์Šต

DaWolยท2024๋…„ 11์›” 12์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
37/39

๐Ÿ’ก ๋ชจ๋“  ํ† ๊ธ€์„ ์—ด๊ณ  ๋‹ซ๋Š” ๋‹จ์ถ•ํ‚ค
Windows : Ctrl + alt + t
Mac : โŒ˜ + โŒฅ + t


01. 3์ฃผ์ฐจ ์˜ค๋Š˜ ๋ฐฐ์šธ ๊ฒƒ

โœ”๏ธ SQL ๊ธฐ๋ณธ๊ตฌ์กฐ๋ฅผ ๋ณต์Šตํ•˜๊ณ , ์ด๋ฒˆ ์ˆ˜์—…์—์„œ ๋ฐฐ์šธ ๋‚ด์šฉ์„ ์•Œ์•„๋ด…์‹œ๋‹ค

  • 1) SQL ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋ณต์Šต ๋ฐ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์กฐ๊ฑด๊ณผ ๋งค์นญํ•ด๋ณด๊ธฐ
    • SQL ๋ฌธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ
      select
      from
      where
      group by
      order by
    • ์กฐํšŒ ์กฐ๊ฑด๊ณผ ๋งค์นญํ•ด๋ณด๊ธฐ
      • ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์—์„œ โ†’
      • ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด 1๊ฑด์ธ ์ฃผ๋ฌธ๊ฑด์˜ โ†’
      • ์Œ์‹ ๊ฐ€๊ฒฉ์˜ ํ‰๊ท ์„ ์Œ์‹ ์ข…๋ฅ˜๋ณ„๋กœ ์กฐํšŒํ•˜์—ฌ โ†’
      • ์Œ์‹ ๊ฐ€๊ฒฉ์ด ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ โ†’
      • ๋งค์นญ ํ•ด๋‹ต
        • ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์—์„œ โ†’ from
        • ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด 1๊ฑด์ธ ์ฃผ๋ฌธ๊ฑด์˜ โ†’ where
        • ์Œ์‹ ๊ฐ€๊ฒฉ์˜ ํ‰๊ท ์„ ์Œ์‹ ์ข…๋ฅ˜๋ณ„๋กœ ์กฐํšŒํ•˜์—ฌ โ†’ avg, group by
        • ์Œ์‹ ๊ฐ€๊ฒฉ์ด ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ โ†’ order by
  • 2) ์ด๋ฒˆ ์ˆ˜์—…์—์„œ ๋ฐฐ์šธ ๋‚ด์šฉ ๋ง›๋ณด๊ธฐ
    • ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋Š” ์žˆ๋Š” ๊ทธ๋Œ€๋กœ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๊ฑธ๊นŒ?
    • ๋ฐฐ๋‹ฌ ์‹œ๊ฐ„ ๊ตฌ๊ฐ„์— ๋”ฐ๋ผ์„œ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์‹ถ์€๋ฐ, ์‹œ๊ฐ„์„ ์กฐ๊ฑด์œผ๋กœ ์ค„ ์ˆ˜๋Š” ์—†๋Š”๊ฑธ๊นŒ?
    • ์ˆ˜์—…์—์„œ ๋ฐฐ์šด๋Œ€๋กœ Query ๋ฅผ ์ผ๋Š”๋ฐ ์™œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”๊ฑธ๊นŒ?

02. ์—…๋ฌด ํ•„์š”ํ•œ ๋ฌธ์ž ํฌ๋งท์ด ๋‹ค๋ฅผ ๋•Œ, SQL๋กœ ๊ฐ€๊ณตํ•˜๊ธฐ (REPLACE, SUBSTRING, CONCAT)

โœ”๏ธ Query ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ž ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ๋ฐ”๊ฟ”๋ด…์‹œ๋‹ค

1) Query ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ

  • ๐Ÿ’ก ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋‹ค๋ณด๋ฉด, Query ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์š”.
    ์•„๋งˆ ์‹ค์Šต์„ ํ•˜๋ฉด์„œ ์•„๋ž˜์˜ ๊ฒฝ์šฐ๋ฅผ ํ•œ ๋ฒˆ์ฏค์€ ์ƒ๊ฐํ•ด๋ดค์„ ํ…๋ฐ์š”, ํ•œ ๋ฒˆ ๊ฐ๊ฐ์˜ ์ผ€์ด์Šค์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค

    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‹ˆ ์ž˜๋ชป๋œ ๊ฐ’์ด ์žˆ์–ด์š”. ์ด์ „์— ์‚ฌ์šฉํ•˜๋˜ ๊ฐ’์ด์–ด์„œ ๋‹ค๋ฅธ ๋ฌธ์ž๋กœ ์ˆ˜์ •์„ ํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ, ํ•˜๋‚˜ํ•˜๋‚˜ ์ˆ˜๋™์œผ๋กœ ํ•˜๊ธฐ๋Š” ๋„ˆ๋ฌด ๋งŽ์•„์„œ SQL ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์„๊นŒ์š”?
    • ์ €๋Š” ์ฃผ์†Œ ์ „์ฒด๊ฐ€ ์•„๋‹Œ โ€˜์‹œ๋„โ€™ ์ •๋ณด๋งŒ ํ•„์š”ํ•ด์š”. ์„œ์šธ์˜ ํ†ต๊ณ„๋งŒ ๊ตฌํ•˜๊ณ  ์‹ถ์€๋ฐ, ์ „์ฒด ์ฃผ์†Œ๊ฐ€ ์•„๋‹Œ โ€˜์„œ์šธโ€™ ๋กœ ๋ฌธ์ž๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†์„๊นŒ์š”?
    • ์ €๋Š” ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์‚ฌ์—…์žฅ ๋ช…๊ณผ ํ•จ๊ป˜ ์ง€์—ญ์ด ๊ฐ™์ด ๋‚˜์™€์•ผํ•ด์š”. โ€˜์‚ฌ์—…์žฅ [์ง€์—ญ]โ€™ ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฌธ์ž ํฌ๋งท์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

2) ํŠน์ • ๋ฌธ์ž๋ฅผ ๋‹ค๋ฅธ ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ (์‹ค์Šต ํฌํ•จ)

- ๐Ÿ‘‰ ๋ฐ”๋€ ์ƒ์  ์ด๋ฆ„, ์ง€์—ญ ์ด๋ฆ„ ํ•œ ๋ฒˆ์— SQL ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
- SQL ์—์„œ๋Š” ํŠน์ • ๋ฌธ์ž๋ฅผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
- ์˜ˆ์‹œ1) ์ตœ๊ทผ์— ์ƒ์  ์ด๋ฆ„์ด ๋ฐ”๋€Œ์—ˆ์ง€๋งŒ ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์—๋Š” ์˜›๋‚  ์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋˜์–ด์žˆ์–ด์š”
- ์˜ˆ์‹œ2) ์˜ˆ์ „์— โ€˜๋ฌธ๊ณก๋ฆฌโ€™ ๋ผ๋Š” ์ง€๋ช…์ด โ€˜๋ฌธ๊ฐ€๋ฆฌโ€™ ๋กœ ๋ฐ”๋€Œ์—ˆ์–ด์š”
- ํ•จ์ˆ˜๋ช… : replace
- ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
    
replace(๋ฐ”๊ฟ€ ์ปฌ๋Ÿผ, ํ˜„์žฌ ๊ฐ’, ๋ฐ”๊ฟ€ ๊ฐ’)

[์‹ค์Šต1] ์‹๋‹น ๋ช…์˜ โ€˜Blue Ribbonโ€™ ์„ โ€˜Pink Ribbonโ€™ ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ

  • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] Replace ์˜ˆ์‹œ
   <select restaurant_name "์›๋ž˜ ์ƒ์ ๋ช…",
   replace(restaurant_name, 'Blue', 'Pink') "๋ฐ”๋€ ์ƒ์ ๋ช…"
   from food_orders
   where restaurant_name like '%Blue Ribbon%'

[์‹ค์Šต2] ์ฃผ์†Œ์˜ โ€˜๋ฌธ๊ณก๋ฆฌโ€™ ๋ฅผ โ€˜๋ฌธ๊ฐ€๋ฆฌโ€™ ๋กœ ๋ฐ”๊พธ๊ธฐ

  • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] Replace ์˜ˆ์‹œ
        select addr "์›๋ž˜ ์ฃผ์†Œ",
               replace(addr, '๋ฌธ๊ณก๋ฆฌ', '๋ฌธ๊ฐ€๋ฆฌ') "๋ฐ”๋€ ์ฃผ์†Œ"
        from food_orders
        where addr like '%๋ฌธ๊ณก๋ฆฌ%'

3) ์›ํ•˜๋Š” ๋ฌธ์ž๋งŒ ๋‚จ๊ธฐ๊ธฐ (์‹ค์Šต ํฌํ•จ)

  • ๐Ÿ‘‰ ์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ํŠน์ • ๋ฌธ์ž๋งŒ ํ•„์š”ํ•  ๋•Œ, SQL ๋กœ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
    • SQL ์—์„œ๋Š” ํŠน์ • ๋ฌธ์ž๋งŒ ๊ณจ๋ผ์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค
    • ์˜ˆ์‹œ) ์ „์ฒด ์ฃผ์†Œ์—์„œ ์•ž๋ถ€๋ถ„์ธ โ€˜์‹œ๋„โ€™ ๋ถ€๋ถ„๋งŒ ํ•„์š”ํ•ด์š”
    • ํ•จ์ˆ˜๋ช… : substring (substr)
    • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
   substr(์กฐํšŒ ํ•  ์ปฌ๋Ÿผ, ์‹œ์ž‘ ์œ„์น˜, ๊ธ€์ž ์ˆ˜)

[์‹ค์Šต] (์„œ์šธ ์Œ์‹์ ๋“ค์˜ ์ฃผ์†Œ๋ฅผ ์ „์ฒด๊ฐ€ ์•„๋‹Œ โ€˜์‹œ๋„โ€™ ๋งŒ ๋‚˜์˜ค๋„๋ก ์ˆ˜์ •)

  • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] substring ์˜ˆ์‹œ
   select addr "์›๋ž˜ ์ฃผ์†Œ",
   substr(addr, 1, 2) "์‹œ๋„"
   from food_orders
   where addr like '%์„œ์šธํŠน๋ณ„์‹œ%'

4) ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์˜ ๋ฌธ์ž๋ฅผ ํ•ฉ์น˜๊ธฐ (์‹ค์Šต ํฌํ•จ)

  • ๐Ÿ‘‰ ์›ํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์— ์žˆ์„ ๋•Œ, ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์„œ ์—…๋ฌด์— ํ•„์š”ํ•œ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
    • SQL ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ) ์„œ์šธ์‹œ์— ์žˆ๋Š” ์Œ์‹์ ์€ โ€˜[์„œ์šธ] ์Œ์‹์ ๋ช…โ€™ ์ด๋ผ๊ณ  ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์–ด์š”
    • ํ•จ์ˆ˜๋ช… : concat
    • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
   concat(๋ถ™์ด๊ณ  ์‹ถ์€ ๊ฐ’1, ๋ถ™์ด๊ณ  ์‹ถ์€ ๊ฐ’2, ๋ถ™์ด๊ณ  ์‹ถ์€ ๊ฐ’3, .....)
  • ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์˜ ์ข…๋ฅ˜
    • ์ปฌ๋Ÿผ
    • ํ•œ๊ธ€
    • ์˜์–ด
    • ์ˆซ์ž
    • ๊ธฐํƒ€ ํŠน์ˆ˜๋ฌธ์ž

[์‹ค์Šต] ์„œ์šธ์‹œ์— ์žˆ๋Š” ์Œ์‹์ ์€ โ€˜[์„œ์šธ] ์Œ์‹์ ๋ช…โ€™ ์ด๋ผ๊ณ  ์ˆ˜์ •

  • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] Concat ์˜ˆ์‹œ
   select restaurant_name "์›๋ž˜ ์ด๋ฆ„",   
   addr "์›๋ž˜ ์ฃผ์†Œ",
    concat('[', substring(addr, 1, 2), '] ', restaurant_name) "๋ฐ”๋€ ์ด๋ฆ„"
   from food_orders
   where addr like '%์„œ์šธ%'

03. [์‹ค์Šต] ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ๊ณ , GROUP BY ์‚ฌ์šฉํ•˜๊ธฐ

โœ”๏ธ ๋ฌธ์ž ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ๊ณผ Group by ์ ˆ์„ ํ•œ ๋ฒˆ์— ์‚ฌ์šฉํ•ด๋ด…์‹œ๋‹ค

1) [์‹ค์Šต] ์„œ์šธ ์ง€์—ญ์˜ ์Œ์‹ ํƒ€์ž…๋ณ„ ํ‰๊ท  ์Œ์‹ ์ฃผ๋ฌธ๊ธˆ์•ก ๊ตฌํ•˜๊ธฐ (์ถœ๋ ฅ : โ€˜์„œ์šธโ€™, โ€˜ํƒ€์ž…โ€™, โ€˜ํ‰๊ท  ๊ธˆ์•กโ€™)

- 1. Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ
    1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ 
    2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
    3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ 
    4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ 
    - 1.Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ ์ฃผ๋ฌธ ๊ธˆ์•ก, ์Œ์‹ ํƒ€์ž…, ์ฃผ์†Œ
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ์„œ์šธ ์ง€์—ญ
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ํ‰๊ท  ๊ตฌํ•˜๋Š” ์ˆ˜์‹, ํŠน์ • ๋ฌธ์ž๋งŒ ๋ฝ‘๋Š” ๊ธฐ๋Šฅ
- 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ
    1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ 
    2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ 
    3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ 
    4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ 
    - 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ from food_orders 
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ price, cuisine_type, addr
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ where addr like โ€˜%์„œ์šธ%โ€™
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ avg(price), substring(addr, 1, 2)
- 3.์ „์ฒด ๊ตฌ์กฐ๋กœ ํ•ฉ์น˜๊ธฐ
       select substring(addr, 1, 2) "์‹œ๋„",
       cuisine_type "์Œ์‹ ์ข…๋ฅ˜",
       avg(price) "ํ‰๊ท  ๊ธˆ์•ก"
       from food_orders
       where addr like '%์„œ์šธ%'
       group by 1, 2

2) [์‹ค์Šต] ์ด๋ฉ”์ผ ๋„๋ฉ”์ธ๋ณ„ ๊ณ ๊ฐ ์ˆ˜์™€ ํ‰๊ท  ์—ฐ๋ น ๊ตฌํ•˜๊ธฐ

    1. Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ
    2. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€
    3. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
    4. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
    5. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      • 1.Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ ๊ณ ๊ฐ ํ…Œ์ด๋ธ”
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ ์ด๋ฉ”์ผ ์ฃผ์†Œ, ๋‚˜์ด, ๊ณ ๊ฐ๋ฒˆํ˜ธ
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ์—†์Œ
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ํŠน์ • ๋ฌธ์ž๋งŒ ๋ฝ‘์•„๋‚ด๋Š” ์ˆ˜์‹, ํ‰๊ท  ๊ตฌํ•˜๋Š” ์ˆ˜์‹, ๊ฐฏ์ˆ˜ ๊ตฌํ•˜๋Š” ์ˆ˜์‹
    • 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ
      1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€
      2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
      3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      • 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ from customers
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ email, age, customer_id
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ X
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ avg(age), count(customer_id) or count(1), substring(email, 10)
    • 3.์ „์ฒด ๊ตฌ์กฐ๋กœ ํ•ฉ์น˜๊ธฐ
      select substring(email, 10) "๋„๋ฉ”์ธ",
             count(customer_id) "๊ณ ๊ฐ ์ˆ˜",
             avg(age) "ํ‰๊ท  ์—ฐ๋ น"
      from customers
      group by 1

  • ์ด๋ฉ”์ผ ๋„๋ฉ”์ธ์— โ€˜mail.comโ€™ ์ด๋ผ๋Š” ์ด์ƒํ•œ ๊ฐ’์ด ์žˆ์–ด์š”! ์ด๋Ÿฐ ๊ฐ’์„ ์ฒ˜๋ฆฌ ํ•  ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”? 4๋ฒˆ์—์„œ ์ด์–ด์„œ ์•Œ์•„๋ด…์‹œ๋‹ค!
  • 3) [์‹ค์Šต] โ€˜[์ง€์—ญ(์‹œ๋„)] ์Œ์‹์ ์ด๋ฆ„ (์Œ์‹์ข…๋ฅ˜)โ€™ ์ปฌ๋Ÿผ์„ ๋งŒ๋“ค๊ณ , ์ด ์ฃผ๋ฌธ๊ฑด์ˆ˜ ๊ตฌํ•˜๊ธฐ
      1. Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ
      2. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€
      3. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
      4. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      5. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      • 1.Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ ์ฃผ์†Œ, ์Œ์‹์  ์ด๋ฆ„, ์Œ์‹ ์ข…๋ฅ˜, ์ฃผ๋ฌธ ๋ฒˆํ˜ธ
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ์—†์Œ
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ๊ฐฏ์ˆ˜ ๊ตฌํ•˜๋Š” ์ˆ˜์‹, ํŠน์ • ๋ฌธ์ž๋งŒ ๋ฝ‘๋Š” ๊ธฐ๋Šฅ, ๋ฌธ์ž๋ฅผ ํ•ฉ์น˜๋Š” ๊ธฐ๋Šฅ
    • 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ
      1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€
      2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
      3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      • 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ from food_orders
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ addr, restaurant_name, cuisine_type, order_id
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ X
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ count(1), substring(addr, 1, 2),
          concat(โ€™[โ€™, ๋ฝ‘์€์‹œ๋„, โ€˜] โ€˜, restaurant_name, โ€˜ (โ€™, cuisine_type, โ€˜)โ€™)
    • 3.์ „์ฒด ๊ตฌ์กฐ๋กœ ํ•ฉ์น˜๊ธฐ
      select concat('[', substring(addr, 1, 2), '] ', restaurant_name, ' (', cuisine_type, ')') "๋ฐ”๋€์ด๋ฆ„",
             count(1) "์ฃผ๋ฌธ๊ฑด์ˆ˜"
      from food_orders
      group by 1

04. ์กฐ๊ฑด์— ๋”ฐ๋ผ ํฌ๋งท์„ ๋‹ค๋ฅด๊ฒŒ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๋ฉด (IF, CASE)

โœ”๏ธ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค

1) Group by ์ฒ˜๋Ÿผ ์กฐ๊ฑด๋„ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ์ค„ ์ˆ˜ ์žˆ์„๊นŒ?

๐Ÿ‘‰ ๋ฒ”์ฃผ๋ณ„๋กœ ๊ฐ’์„ ๊ตฌํ•  ๋•Œ๋Š” group by ๋ฅผ ์ป์ฃ . 
๋ฒ”์ฃผ๋ณ„๋กœ ๋‹ค๋ฅธ ์—ฐ์‚ฐ (๊ณ„์‚ฐ, ๋ฌธ์ž ๋ฐ”๊พธ๊ธฐ) ์„ ์ ์šฉํ•  ์ˆ˜๋„ ์žˆ์„๊นŒ์š”?
๐Ÿ‘‰ SQL ์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์—ฐ์‚ฐ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค
โ€™๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฒ”์ฃผโ€™ ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์ฃผ๊ณ , ํ•ด๋‹น ๋ฒ”์ฃผ์— ์ ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์„ ์ง€์ •ํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค
๐Ÿ’ก ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ์•„๋ž˜์˜ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•ด๋ด…์‹œ๋‹ค

- ์Œ์‹ ํƒ€์ž…์„ โ€˜Koreanโ€™ ์ผ ๋•Œ๋Š” โ€˜ํ•œ์‹โ€™, โ€˜Koreanโ€™ ์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” โ€˜๊ธฐํƒ€โ€™ ๋ผ๊ณ  ์ง€์ •ํ•˜๊ณ  ์‹ถ์–ด์š”
- ์ฃผ์†Œ์˜ ์‹œ๋„๋ฅผ โ€˜๊ฒฝ๊ธฐ๋„โ€™ ์ผ๋•Œ๋Š” โ€˜๊ฒฝ๊ธฐ๋„โ€™, ์•„๋‹ ๋•Œ๋Š” ์•ž์˜ ๋‘ ๊ธ€์ž๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์–ด์š”
- ์Œ์‹ ๋‹จ๊ฐ€๋ฅผ ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด 1์ผ ๋•Œ๋Š” ์Œ์‹ ๊ฐ€๊ฒฉ, ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด 2๊ฐœ ์ด์ƒ์ผ ๋•Œ๋Š” ์Œ์‹๊ฐ€๊ฒฉ/์ฃผ๋ฌธ์ˆ˜๋Ÿ‰ ์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ์‹ถ์–ด์š”

2) ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ - If ๋ฌธ ๊ธฐ์ดˆ (์‹ค์Šต ํฌํ•จ)

๐Ÿ‘‰ ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฐ€์žฅ ๊ธฐ์ดˆ ๋ฌธ๋ฒ•์€ โ€˜Ifโ€™ ๋ฌธ์ž…๋‹ˆ๋‹ค (์—‘์…€์˜ ๊ธฐ๋Šฅ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค)
- IF ๋ฌธ์€ ์›ํ•˜๋Š” ์กฐ๊ฑด์— ์ถฉ์กฑํ•  ๋•Œ ์ ์šฉํ•  ๋ฐฉ๋ฒ•๊ณผ ์•„๋‹Œ ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
- ์˜ˆ์‹œ) ์Œ์‹ ํƒ€์ž…์„ โ€˜Koreanโ€™ ์ผ ๋•Œ๋Š” โ€˜ํ•œ์‹โ€™, โ€˜Koreanโ€™ ์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” โ€˜๊ธฐํƒ€โ€™ ๋ผ๊ณ  ์ง€์ •ํ•˜๊ณ  ์‹ถ์–ด์š”
- ํ•จ์ˆ˜๋ช… : if
- ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
    
    ```sql
    if(์กฐ๊ฑด, ์กฐ๊ฑด์„ ์ถฉ์กฑํ•  ๋•Œ, ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•  ๋•Œ)
    ```
    

[์‹ค์Šต1] ์Œ์‹ ํƒ€์ž…์„ โ€˜Koreanโ€™ ์ผ ๋•Œ๋Š” โ€˜ํ•œ์‹โ€™, โ€˜Koreanโ€™ ์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” โ€˜๊ธฐํƒ€โ€™ ๋ผ๊ณ  ์ง€์ •

  • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] If๋ฌธ ์˜ˆ์‹œ
   select restaurant_name,
   cuisine_type "์›๋ž˜ ์Œ์‹ ํƒ€์ž…",
   if(cuisine_type='Korean', 'ํ•œ์‹', '๊ธฐํƒ€') "์Œ์‹ ํƒ€์ž…"
   from food_orders

[์‹ค์Šต2] 02. ๋ฒˆ ์‹ค์Šต์—์„œ โ€˜๋ฌธ๊ณก๋ฆฌโ€™ ๊ฐ€ ํ‰ํƒ์—๋งŒ ํ•ด๋‹น๋  ๋•Œ, ํ‰ํƒ โ€˜๋ฌธ๊ณก๋ฆฌโ€™ ๋งŒ โ€˜๋ฌธ๊ฐ€๋ฆฌโ€™ ๋กœ ์ˆ˜์ •

  • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] If๋ฌธ ์˜ˆ์‹œ2
   select addr "์›๋ž˜ ์ฃผ์†Œ",
   if(addr like '%ํ‰ํƒ๊ตฐ%', replace(addr, '๋ฌธ๊ณก๋ฆฌ', '๋ฌธ๊ฐ€๋ฆฌ'), addr) "๋ฐ”๋€ ์ฃผ์†Œ"
   from food_orders
   where addr like '%๋ฌธ๊ณก๋ฆฌ%'

[์‹ค์Šต3] 03. ๋ฒˆ ์‹ค์Šต์—์„œ ์ž˜๋ชป๋œ ์ด๋ฉ”์ผ ์ฃผ์†Œ (gmail) ๋งŒ ์ˆ˜์ •์„ ํ•ด์„œ ์‚ฌ์šฉ

  • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] If๋ฌธ ์˜ˆ์‹œ3
   select substring(if(email like '%gmail%', replace(email, 'gmail', '@gmail'), email), 10) "์ด๋ฉ”์ผ ๋„๋ฉ”์ธ",
   count(customer_id) "๊ณ ๊ฐ ์ˆ˜",
   avg(age) "ํ‰๊ท  ์—ฐ๋ น"
   from customers
   group by 1

3) ์กฐ๊ฑด์„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ง€์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ - Case ๋ฌธ ๊ธฐ์ดˆ (์‹ค์Šต ํฌํ•จ)

  • ๐Ÿ‘‰ ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋‹ค๋ณด๋ฉด, ๋‘ ๊ฐœ ์ด์ƒ ์ง€์ •์„ ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.
    ์ด ๋•Œ๋Š” case ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๋ฒˆ์˜ if ๋ฌธ์„ ์ ์šฉ ํ•œ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
    • Case ๋ฌธ์€ ๊ฐ ์กฐ๊ฑด๋ณ„๋กœ ์ ์šฉ ํ•  ๊ฐ’์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์กฐ๊ฑด๋ณ„๋กœ ์ง€์ •์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด if ๋ฌธ์„ ์—ฌ๋Ÿฌ๋ฒˆ ์“ด ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      case(์กฐ๊ฑด1, ๊ฐ’1, case(์กฐ๊ฑด2, ๊ฐ’2, ๊ฐ’3))
    • ์˜ˆ์‹œ) ์Œ์‹ ํƒ€์ž…์„ โ€˜Koreanโ€™ ์ผ ๋•Œ๋Š” โ€˜ํ•œ์‹โ€™, โ€˜Japaneseโ€™ ํ˜น์€ โ€˜Chieneseโ€™ ์ผ ๋•Œ๋Š” โ€˜์•„์‹œ์•„โ€™, ๊ทธ ์™ธ์—๋Š” โ€˜๊ธฐํƒ€โ€™ ๋ผ๊ณ  ์ง€์ •
    • ํ•จ์ˆ˜๋ช… : case
    • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
      case when ์กฐ๊ฑด1 then ๊ฐ’(์ˆ˜์‹)1
           when ์กฐ๊ฑด2 then ๊ฐ’(์ˆ˜์‹)2
           else ๊ฐ’(์ˆ˜์‹)3
      end

[์‹ค์Šต1] ์Œ์‹ ํƒ€์ž…์„ โ€˜Koreanโ€™ ์ผ ๋•Œ๋Š” โ€˜ํ•œ์‹โ€™, โ€˜Japaneseโ€™ ํ˜น์€ โ€˜Chieneseโ€™ ์ผ ๋•Œ๋Š” โ€˜์•„์‹œ์•„โ€™, ๊ทธ ์™ธ์—๋Š” โ€˜๊ธฐํƒ€โ€™ ๋ผ๊ณ  ์ง€์ •

   select restaurant_name,
   cuisine_type AS "์›๋ž˜ ์Œ์‹ ํƒ€์ž…",
   case when (cuisine_type='Korean') then 'ํ•œ์‹'
   else '๊ธฐํƒ€'
   end as " ์Œ์‹ ํƒ€์ž…"
   from food_orders

[์‹ค์Šต2] ์Œ์‹ ๋‹จ๊ฐ€๋ฅผ ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด 1์ผ ๋•Œ๋Š” ์Œ์‹ ๊ฐ€๊ฒฉ, ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด 2๊ฐœ ์ด์ƒ์ผ ๋•Œ๋Š” ์Œ์‹๊ฐ€๊ฒฉ/์ฃผ๋ฌธ์ˆ˜๋Ÿ‰ ์œผ๋กœ ์ง€์ •
*์œ„์™€ ๊ฐ™์€ ์‹์€ if ๋กœ๋„ ์“ธ ์ˆ˜ ์žˆ์ฃ ! ํ•œ ๋ฒˆ ์—ฐ์Šตํ•ด๋ณด์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค!

  • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] Case When ์‹ค์Šต1
   select order_id,
          price,
          quantity,
          case when quantity=1 then price
          when quantity>=2 then price/quantity end "์Œ์‹ ๋‹จ๊ฐ€"
   from food_orders

[์‹ค์Šต3] ์ฃผ์†Œ์˜ ์‹œ๋„๋ฅผ โ€˜๊ฒฝ๊ธฐ๋„โ€™ ์ผ๋•Œ๋Š” โ€˜๊ฒฝ๊ธฐ๋„โ€™, โ€˜ํŠน๋ณ„์‹œโ€™ ํ˜น์€ โ€˜๊ด‘์—ญ์‹œโ€™ ์ผ ๋•Œ๋Š” ๋ถ™์—ฌ์„œ, ์•„๋‹ ๋•Œ๋Š” ์•ž์˜ ๋‘ ๊ธ€์ž๋งŒ ์‚ฌ์šฉ

  • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] Case When ์‹ค์Šต2
   select restaurant_name,
         addr,
         case when addr like '%๊ฒฝ๊ธฐ๋„%' then '๊ฒฝ๊ธฐ๋„'
              when addr like '%ํŠน๋ณ„%' or addr like '%๊ด‘์—ญ%' then substring(addr, 1, 5)
              else substring(addr, 1, 2) end "๋ณ€๊ฒฝ๋œ ์ฃผ์†Œ"
   from food_orders

4) ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์•Œ์•„๋ณด๊ธฐ

  • ๐Ÿ’ก ์กฐ๊ฑด๋ฌธ, ์œ ์šฉํ•ด๋ณด์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์–ด๋””์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด!
    ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ผ€์ด์Šค๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค
    • ์ƒˆ๋กœ์šด ์นดํ…Œ๊ณ ๋ฆฌ ๋งŒ๋“ค๊ธฐ
      • ์Œ์‹ ํƒ€์ž…๊ณผ ๊ฐ™์ด ์ƒˆ๋กœ์šด ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        • ํ•œ๊ตญ ์Œ์‹, ์•„์‹œ์•„ ์Œ์‹, ๋ฏธ๊ตญ ์Œ์‹, ์œ ๋Ÿฝ ์Œ์‹ ์ด๋Ÿฐ ์‹์˜ ์ƒˆ๋กœ์šด cuisine_category ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์ฃ 
      • ๊ณ ๊ฐ๋“ค์˜ ๋ถ„๋ฅ˜๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        • 10๋Œ€ ์—ฌ์„ฑ, 10๋Œ€ ๋‚จ์„ฑ, 20๋Œ€ ์—ฌ์„ฑ, 20๋Œ€ ๋‚จ์„ฑ ๋“ฑ, ์ด๋Ÿฐ ์‹์˜ ์„ฑ๋ณ„๊ณผ ๋‚˜์ด๋ณ„๋กœ ์ƒˆ๋กœ์šด ๊ณ ๊ฐ ๊ตฐ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์ฃ 
    • ์—ฐ์‚ฐ์‹์„ ์ ์šฉํ•  ์กฐ๊ฑด ์ง€์ •ํ•˜๊ธฐ
      • ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ํ”ํžˆ๋“ค ํ˜„๊ธˆ ์‚ฌ์šฉ, ์นด๋“œ์‚ฌ์šฉ์„ ๋‚˜๋ˆ„๊ณ ๋Š” ํ•˜์ฃ 
      • ํ˜„๊ธˆ์ผ ๋•Œ์˜ ์ˆ˜์ˆ˜๋ฃŒ์œจ๊ณผ ์นด๋“œ์ผ ๋•Œ์˜ ์ˆ˜์ˆ˜๋ฃŒ์œจ์ด ๋‹ค๋ฅด๋‹ค๋ฉด, ์—ฐ์‚ฐ์‹์„ ๋งŒ๋“ค ๋•Œ if ๋ฌธ ํ˜น์€ case ๋ฌธ์œผ๋กœ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ˆ˜์ˆ˜๋ฃŒ์œจ ํ˜น์€ ์ˆ˜์ˆ˜๋ฃŒ ๊ณ„์‚ฐ ๋ฐฉ์‹์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
    • ๋‹ค๋ฅธ ๋ฌธ๋ฒ• ์•ˆ์—์„œ ์ ์šฉํ•˜๊ธฐ
      • if, case ๋ฌธ ์•ˆ์— ๋‹ค๋ฅธ ๋ฌธ๋ฒ•์ด๋‚˜ ์—ฐ์‚ฐ์„ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ๋ฌธ๋ฒ• ์•ˆ์— ์กฐ๊ฑด๋ฌธ์„ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค
      • ์˜ˆ๋ฅผ ๋“ค์–ด concat ๋ฌธ์œผ๋กœ ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์„ ํ•ฉ์น  ๋•Œ, rating ์ด ์žˆ์„ ๋•Œ๋Š” rating ์„ ๋„ฃ์–ด์ฃผ๊ณ  ์—†์„ ๋•Œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋„ฃ์ง€ ์•Š๋„๋ก, concat ์•ˆ์— if ๋ฌธ์„ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ์ฃ 

05. [์‹ค์Šต] SQL๋กœ ๊ฐ„๋‹จํ•œ User Segmentation ํ•ด๋ณด๊ธฐ

โœ”๏ธ ์ƒˆ๋กœ์šด ์นดํ…Œ๊ณ ๋ฆฌ ๋งŒ๋“ค๊ธฐ - ์กฐ๊ฑด๋ฌธ๊ณผ ์ˆ˜์‹์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ User Segmentation ์„ ํ•ด๋ด…์‹œ๋‹ค

1) [์‹ค์Šต] 10์„ธ ์ด์ƒ, 30์„ธ ๋ฏธ๋งŒ์˜ ๊ณ ๊ฐ์˜ ๋‚˜์ด์™€ ์„ฑ๋ณ„๋กœ ๊ทธ๋ฃน ๋‚˜๋ˆ„๊ธฐ (์ด๋ฆ„๋„ ๊ฐ™์ด ์ถœ๋ ฅ)

- 1. Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ
    1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ 
    2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
    3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ 
    4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ 
    - 1.Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ ๊ณ ๊ฐ ํ…Œ์ด๋ธ”
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ ์ด๋ฆ„, ๋‚˜์ด, ์„ฑ๋ณ„
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ๋‚˜์ด๊ฐ€ 10์„ธ ์ด์ƒ, 30์„ธ ๋ฏธ๋งŒ
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ์กฐ๊ฑด๋ฌธ
- 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ
    1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ 
    2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ 
    3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ 
    4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ 
    - 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ from customers
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ name, age, gender
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ where age between 10 and 29
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ case when โ€ฆ. end
- 3.์ „์ฒด ๊ตฌ์กฐ๋กœ ํ•ฉ์น˜๊ธฐ
    
   select name,
   age,
   gender,
   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 "๊ทธ๋ฃน" 
   from customers
   where age between 10 and 29

2) [์‹ค์Šต] ์Œ์‹ ๋‹จ๊ฐ€, ์Œ์‹ ์ข…๋ฅ˜ ๋ณ„๋กœ ์Œ์‹์  ๊ทธ๋ฃน ๋‚˜๋ˆ„๊ธฐ

(Korean = ํ•œ์‹
Japanese, Chinese, Thai, Vietnamese, Indian = ์•„์‹œ์•„์‹
๊ทธ์™ธ = ๊ธฐํƒ€)

(๊ฐ€๊ฒฉ = 5000, 15000, ๊ทธ ์ด์ƒ)
    1. Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ
    2. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€
    3. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
    4. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
    5. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      • 1.Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ ์ฃผ๋ฌธ ๊ธˆ์•ก, ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰, ์Œ์‹ ์ข…๋ฅ˜
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ X
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ์กฐ๊ฑด๋ฌธ
  • 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ
    1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€
    2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
    3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
    4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      • 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ from food_orders
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ price, quantity, cuisine_type
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ X
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ case when โ€ฆ. end
      • 3.์ „์ฒด ๊ตฌ์กฐ๋กœ ํ•ฉ์น˜๊ธฐ
        • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] 3-5 ์‹ค์Šต2
   select restaurant_name,
          price/quantity "๋‹จ๊ฐ€",
          cuisine_type,
          order_id,
          case when (price/quantity <5000) and cuisine_type='Korean' then 'ํ•œ์‹1'
          when (price/quantity between 5000 and 15000) and cuisine_type='Korean' then 'ํ•œ์‹2'
          when (price/quantity > 15000) and cuisine_type='Korean' then 'ํ•œ์‹3'
          when (price/quantity <5000) and cuisine_type in ('Japanese', 'Chinese', 'Thai', 'Vietnamese', 'Indian') then '์•„์‹œ์•„์‹1'
          when (price/quantity between 5000 and 15000) and cuisine_type in ('Japanese', 'Chinese', 'Thai', 'Vietnamese', 'Indian') then '์•„์‹œ์•„์‹2'
          when (price/quantity > 15000) and cuisine_type in ('Japanese', 'Chinese', 'Thai', 'Vietnamese', 'Indian') then '์•„์‹œ์•„์‹3'
          when (price/quantity <5000) and cuisine_type not in ('Korean', 'Japanese', 'Chinese', 'Thai', 'Vietnamese', 'Indian') then '๊ธฐํƒ€1'
          when (price/quantity between 5000 and 15000) and cuisine_type not in ('Korean', 'Japanese', 'Chinese', 'Thai', 'Vietnamese', 'Indian') then '๊ธฐํƒ€2'
          when (price/quantity > 15000) and cuisine_type not in ('Korean', 'Japanese', 'Chinese', 'Thai', 'Vietnamese', 'Indian') then '๊ธฐํƒ€3' end "์‹๋‹น ๊ทธ๋ฃน"
   from food_orders

06. [์‹ค์Šต] ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์‹์„ ์ ์šฉํ•œ ์ˆ˜์ˆ˜๋ฃŒ ๊ตฌํ•ด๋ณด๊ธฐ

โœ”๏ธ ์กฐ๊ฑด๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ˆ˜์‹์„ ์ ์šฉํ•ด๋ณด๊ธฐ

1) [์‹ค์Šต] ์ง€์—ญ๊ณผ ๋ฐฐ๋‹ฌ์‹œ๊ฐ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐ๋‹ฌ์ˆ˜์ˆ˜๋ฃŒ ๊ตฌํ•˜๊ธฐ (์‹๋‹น ์ด๋ฆ„, ์ฃผ๋ฌธ ๋ฒˆํ˜ธ ํ•จ๊ป˜ ์ถœ๋ ฅ)

(์ง€์—ญ : ์„œ์šธ, ๊ธฐํƒ€ - ์„œ์šธ์ผ ๋•Œ๋Š” ์ˆ˜์ˆ˜๋ฃŒ ๊ณ„์‚ฐ * 1.1, ๊ธฐํƒ€์ผ ๋•Œ๋Š” ๊ณฑํ•˜๋Š” ๊ฐ’ ์—†์Œ
 ์‹œ๊ฐ„ : 25๋ถ„, 30๋ถ„ - 25๋ถ„ ์ดˆ๊ณผํ•˜๋ฉด ์Œ์‹ ๊ฐ€๊ฒฉ์˜ 5%, 30๋ถ„ ์ดˆ๊ณผํ•˜๋ฉด ์Œ์‹ ๊ฐ€๊ฒฉ์˜ 10%)
    1. Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ
      1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€
      2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
      3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      - 1.Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ (ํ•ด๋‹ต)
      1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”
      2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ ์‹๋‹น ์ด๋ฆ„, ์ฃผ๋ฌธ ๋ฒˆํ˜ธ, ์ง€์—ญ, ๋ฐฐ๋‹ฌ์‹œ๊ฐ„, ์ฃผ๋ฌธ ๊ธˆ์•ก
      3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ X
      4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ์กฐ๊ฑด๋ฌธ
      - 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ
      1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€
      2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
      3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      - 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ (ํ•ด๋‹ต)
      1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ from food_orders
      2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ restaurant_name, order_id, addr, derlivery_time, price
      3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ X
      4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ case when, if
      - 3.์ „์ฒด ๊ตฌ์กฐ๋กœ ํ•ฉ์น˜๊ธฐ
        ```sql
          select restaurant_name,
                 order_id,
                 delivery_time,
                 price,
                 addr,
                 case when delivery_time>25 and delivery_time<=30 then price*0.05*(if(addr like '%์„œ์šธ%', 1.1, 1))
                      when delivery_time>30 then price*1.1*(if(addr like '%์„œ์šธ%', 1.1, 1))
                      else 0 end "์ˆ˜์ˆ˜๋ฃŒ"
          from food_orders
       ```

2) [์‹ค์Šต] ์ฃผ๋ฌธ ์‹œ๊ธฐ์™€ ์Œ์‹ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐ๋‹ฌํ• ์ฆ๋ฃŒ ๊ตฌํ•˜๊ธฐ

(์ฃผ๋ฌธ ์‹œ๊ธฐ : ํ‰์ผ ๊ธฐ๋ณธ๋ฃŒ = 3000 / ์ฃผ๋ง ๊ธฐ๋ณธ๋ฃŒ = 3500
 ์Œ์‹ ์ˆ˜ : 3๊ฐœ ์ดํ•˜์ด๋ฉด ํ• ์ฆ ์—†์Œ / 3๊ฐœ ์ดˆ๊ณผ์ด๋ฉด ๊ธฐ๋ณธ๋ฃŒ * 1.2)
    1. Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ
    2. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€
    3. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
    4. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
    5. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      • 1.Query ๋ฅผ ์ ๊ธฐ ์ „์— ํ๋ฆ„์„ ์ •๋ฆฌํ•ด๋ณด๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰, ์ฃผ๋ฌธ ์‹œ๊ธฐ
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ X
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ ์กฐ๊ฑด๋ฌธ
  • 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ
    1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€
    2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€
    3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
    4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€
      • 2.๊ตฌ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ธฐ (ํ•ด๋‹ต)
        1. ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ธ๊ฐ€ โ†’ from food_orders
        2. ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๊ฐ€ โ†’ quantity, day_of_the_week
        3. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ X
        4. ์–ด๋–ค ํ•จ์ˆ˜ (์ˆ˜์‹) ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ โ†’ if
  • 3.์ „์ฒด ๊ตฌ์กฐ๋กœ ํ•ฉ์น˜๊ธฐ
   select order_id,
          price,
          quantity,
          day_of_the_week,
          if(day_of_the_week='Weekday', 3000, 3500)*(if(quantity<=3, 1, 1.2)) "ํ• ์ฆ๋ฃŒ"
   from food_orders

07. SQL๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์™œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋‚˜์š”_ (Data Type ์˜ค๋ฅ˜ ํ•ด๊ฒฐํ•˜๊ธฐ)

โœ”๏ธ ์ˆซ์ž ๊ณ„์‚ฐ์ด๋‚˜ ๋ฌธ์ž ๊ฐ€๊ณต ์‹œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์•Œ์•„๋ด…์‹œ๋‹ค.

  • ๋ฌธ์ž/์ˆซ์ž ๊ณ„์‚ฐ์„ ํ–ˆ๋”๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์–ด์š”
    ๐Ÿ‘‰ SQL ๋ฌธ์„ ํšŒ์‚ฌ์—์„œ ์จ๋ดค๋Š”๋ฐ์š”, avg, substring ๋“ฑ ํ•จ์ˆ˜๋ฅผ ์ผ๋”๋‹ˆ ์—๋Ÿฌ๋ฉ”์„ธ์ง€์— โ€˜data typeโ€™ ๋‹จ์–ด๊ฐ€ ๋œจ๋ฉด์„œ ์‹คํ–‰๋˜์ง€ ์•Š์•„์š”
    • ์šฐ๋ฆฌ๊ฐ€ ์‹ค์Šตํ•˜๋Š” Mysql ๊ณผ ๋‹ค๋ฅด๊ฒŒ, ๋‹ค๋ฅธ SQL ๋ฌธ๋ฒ•์—์„œ๋Š” data type ์ด ๋‹ค๋ฅผ ๋•Œ ์—ฐ์‚ฐ์ด ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • 1) ๋ฒˆ์—์„œ ๋ดค๋˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด, rating ์€ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ๋ฌธ์ž ํ˜•์œผ๋กœ ์ €์žฅ์ด ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค
      (์ถœ๋ ฅ ๊ฒฐ๊ณผ ์ปฌ๋Ÿผ๋ช… ์˜†์˜ โ€˜ABCโ€™ ํ˜น์€ โ€˜123โ€™ ์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”. โ€˜ABCโ€™ ๋Š” ๋ฌธ์ž๋กœ ์ €์žฅ์ด ๋˜์–ด์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.)

- ๋”ฐ๋ผ์„œ ๋ฌธ์ž, ์ˆซ์ž๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ํ•จ์ˆ˜์— ์‚ฌ์šฉ ํ•  ๋•Œ์—๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
    --์ˆซ์ž๋กœ ๋ณ€๊ฒฝ
    cast(if(rating='Not given', '1', rating) as decimal) 
        
    --๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ
    concat(restaurant_name, '-', cast(order_id as char))

HW. 3์ฃผ์ฐจ ์ˆ™์ œ ํ•ด์„ค

๐Ÿ’โ€โ™€๏ธ ๋‹ค์Œ์˜ ์กฐ๊ฑด์œผ๋กœ ๋ฐฐ๋‹ฌ์‹œ๊ฐ„์ด ๋Šฆ์—ˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”.

  • ์ฃผ์ค‘ : 25๋ถ„ ์ด์ƒ

  • ์ฃผ๋ง : 30๋ถ„ ์ด์ƒ

  • [์ฝ”๋“œ์Šค๋‹ˆํŽซ] HW3 ์ •๋‹ต์ฝ”๋“œ

select order_id,  
       restaurant_name,
       day_of_the_week,
       delivery_time,
       case when day_of_the_week='Weekday' and delivery_time>=25 then 'Late'
            when day_of_the_week='Weekend' and delivery_time>=30 then 'Late'
            else 'On-time' end "์ง€์—ฐ์—ฌ๋ถ€"
from food_orders
profile
๊ณ ์–‘์ด ๋‹ค์›”์ด

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