๐Ÿ—‚๏ธ 2024.06.26 TIL

Donghyunยท2024๋…„ 6์›” 26์ผ
0

TIL (Today I Learned)

๋ชฉ๋ก ๋ณด๊ธฐ
3/53
post-thumbnail

SQL

  1. ๋ทฐ (view)

    ๐Ÿ’ก ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์ด๋‚˜ ๋‹ค๋ฅธ ๋ทฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑ๋˜๋Š” ๊ฐ€์ƒ ํ…Œ์ด๋ธ”
    • ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์€ ๋””์Šคํฌ์— ๊ณต๊ฐ„์ด ํ• ๋‹น๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
    • But, ๋ทฐ๋Š” ๋ฐ์ดํ„ฐ ๋”•์…”๋„ˆ๋ฆฌ ํ…Œ์ด๋ธ”์— ๋ทฐ์— ๋Œ€ํ•œ ์ •์˜๋งŒ ์ €์žฅ
    • ํ”ผ๋ด‡ ํ…Œ์ด๋ธ” (Pivot table)
      • 2๊ฐœ ์ด์ƒ์˜ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•  ๋•Œ, ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ๋ฐฐ์—ดํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ
    • ์˜ˆ์‹œ ์Œ์‹์ ๋ณ„ ์‹œ๊ฐ„๋ณ„ ์ฃผ๋ฌธ๊ฑด์ˆ˜ Pivot Table ๋ทฐ ๋งŒ๋“ค๊ธฐ (15~20์‹œ ์‚ฌ์ด, 20์‹œ ์ฃผ๋ฌธ๊ฑด์ˆ˜ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ)
      1. ์Œ์‹์ ๋ณ„, ์‹œ๊ฐ„๋ณ„ ์ฃผ๋ฌธ๊ฑด์ˆ˜ ์ง‘๊ณ„ํ•˜๊ธฐ

        select a.restaurant_name,
               substring(b.time, 1, 2) hh,
               count(1) cnt_order
        from food_orders a inner join payments b on a.order_id=b.order_id
        where substring(b.time, 1, 2) between 15 and 20
        group by 1, 2
      2. Pivot view ๊ตฌ์กฐ ๋งŒ๋“ค๊ธฐ

        select restaurant_name,
               max(if(hh='15', cnt_order, 0)) "15",
               max(if(hh='16', cnt_order, 0)) "16",
               max(if(hh='17', cnt_order, 0)) "17",
               max(if(hh='18', cnt_order, 0)) "18",
               max(if(hh='19', cnt_order, 0)) "19",
               max(if(hh='20', cnt_order, 0)) "20"
        from 
        (
        select a.restaurant_name,
               substring(b.time, 1, 2) hh,
               count(1) cnt_order
        from food_orders a inner join payments b on a.order_id=b.order_id
        where substring(b.time, 1, 2) between 15 and 20
        group by 1, 2
        ) a
        group by 1
        order by 7 desc
      • ๊ฒฐ๊ณผ: subquery์—์„œ ์ž‘์„ฑํ•œ hh ๊ฐ€ pivot ์˜ ์ปฌ๋Ÿผ์ด ๋˜๋Š” ํ‚ค(Key)
profile
๋ฐ์ดํ„ฐ๋ถ„์„ ๊ณต๋ถ€ ์ผ๊ธฐ~!

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