[SQL] Practice 3

Updated:

Categories:

Tags: , ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

sql - ์ถ”๊ฐ€๋กœ ์•Œ๊ฒŒ ๋œ ๊ฒƒ

  • DATETIME ์‹œ๋ถ„์ดˆ๊นŒ์ง€ ๋‚˜์˜ด.
  • TEXT ์ค„๋„˜๊น€ ๊ฐ€๋Šฅ, ๊ธธ์ด์ œํ•œ ์—†์Œ
  • Between A and B ์˜ ๊ฒฝ์šฐ B๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Œ.
  • โœจcoalesce( ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ) โ‡’ coalesce๋Š” null์ด ์•„๋‹ ๋•Œ๋Š” ์™ผ์ชฝ, null์ผ ๋•Œ๋Š” ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ.

๋ ˆ์Šคํ† ๋ž‘ ์˜ˆ์•ฝ์‹œ์Šคํ…œ

๋ฌธ์ œ - ๊ณ ๊ธ‰2

  1. ๋ฌธ์ œ

    ํŠน์ • ๊ธฐ๊ฐ„ ๋™์•ˆ์˜ ์ด ์˜ˆ์•ฝ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์„ธ์š”. (์˜ˆ: 2024๋…„ 5์›” 1์ผ๋ถ€ํ„ฐ 5์›” 31์ผ๊นŒ์ง€)

  2. ๋‚˜์˜ ์ฟผ๋ฆฌ

    1
    2
    3
    4
    
     SELECT COUNT(r.reservation_id) 
     from reservations r
     where r.reservation_time
     BETWEEN '2024-05-01' AND '2024-05-31';
    

    Between A and B ์˜ ๊ฒฝ์šฐ B๋Š” ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ BETWEEN โ€˜2024-05-01โ€™ AND โ€˜2024-06-01โ€™ ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•จ.

๋ฌธ์ œ - ๊ณ ๊ธ‰4

  1. ๋ฌธ์ œ

    ํŠน์ • ๊ณ ๊ฐ(์˜ˆ: ๊ณ ๊ฐ ID๊ฐ€ 3)์˜ ์ด ์ฃผ๋ฌธ ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•˜์„ธ์š”.

  2. ๋‚˜์˜ ์ฟผ๋ฆฌ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     select c.name,sum(m.price*o2.quantity)
     from customers c 
     join reservations r 
     on r.customer_id =c.customer_id 
     join orders o 
     on r.reservation_id =o.order_id 
     join orderdetails o2 
     on o2.order_id = o.order_id 
     join menuitems m 
     on m.menu_item_id =o2.menu_item_id 
     where c.customer_id =3
     group by c.name ;
    

    ์ด ์ฃผ๋ฌธ ๊ธˆ์•ก๋งŒ ๊ณ„์‚ฐํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๊ตณ์ด customer ๊นŒ์ง€ join ํ•  ํ•„์š” ์—†์ด reservation์— customer_id๊ฐ€ ์žˆ์–ด์„œ reservation๊นŒ์ง€ ์กฐ์ธํ•˜๋ฉด ๋จ.

  3. Reference

    1
    2
    3
    4
    5
    6
    7
    8
    
     select sum(mi.price * od.quantity) as total_spend 
     from orders o 
     join orderdetails od
     on od.order_id = o.order_id 
     join menuitems mi
     on mi.menu_item_id = od.menu_item_id 
     where o.reservation_id in (select r.reservation_id from reservations r 
     where r.customer_id = 3);
    

    ๋งˆ์ง€๋ง‰ join ๋Œ€์‹ ์— where์ ˆ์—์„œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ์กฐ๊ฑด ๊ฑธ์–ด์„œ ํ’€ ์ˆ˜ ์žˆ์Œ, ๊ฒฐ๊ณผ๋Š” ๋‚˜์™€ ๋™์ผํ•˜๊ฒŒ ๋‚˜์˜จ๋‹ค!

๋ฌธ์ œ - ๊ณ ๊ธ‰7 , ํ‹€๋ฆผ โšก

  1. ๋ฌธ์ œ

    ๋ชจ๋“  ์ฃผ๋ฌธ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์ฃผ๋ฌธ๋œ ๋ฉ”๋‰ด ์•„์ดํ…œ์˜ ์ด๋ฆ„๊ณผ ์ด ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์„ ์กฐํšŒํ•˜์„ธ์š”.

  2. ๋‚˜์˜ ์ฟผ๋ฆฌ

    1
    2
    3
    4
    5
    6
    7
    
     select m.name, sum(o.quantity)  
     from menuitems m
     join orderdetails o
     on o.menu_item_id = m.menu_item_id 
     where o.quantity in (select max(o.menu_item_id) 
     					from orderdetails o2)
     group by o.menu_item_id ;
    

    ์ค‘๋ณต ์ตœ๋Œ€๊ฐ’์€ ์กฐํšŒ๋ชปํ•˜๊ธฐ๋•Œ๋ฌธ์— ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉํ•ด์•ผํ•จ

    โ†’ํ’€์ด ์ค‘์— ๋‹ค์‹œ ๋ณด๋‹ˆ max๊ฐ’์˜ ๊ธฐ์ค€์ด ์ž˜๋ชป๋˜์–ด ์žˆ์–ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฟผ๋ฆฌ๋ฌธ์„ ์ˆ˜์ •ํ–ˆ๋‹ค.

    1
    2
    3
    4
    5
    6
    7
    
     select m.name, sum(od.quantity)as total_order
     from menuitems m
     join orderdetails od
     on od.menu_item_id = m.menu_item_id 
     where od.quantity in (select max(o2.quantity) 
     					from orderdetails o2)
     group by od.menu_item_id ;
    

  3. Reference

    1
    2
    3
    4
    5
    6
    
     select m.name,sum(od.quantity)as total_order from menuitems m
     join orderdetails od on od.menu_item_id = m.menu_item_id 
     group by m.name
     having total_order = (select max(qt) from (select sum(od2.quantity) as qt 
     						from orderdetails od2
     						group by menu_item_id)as subquery);
    

    ์‹คํ–‰๊ฒฐ๊ณผ๋Š” ์ˆ˜์ •ํ•œ ํ’€์ด์™€ ๋™์ผํ•˜๋‹ค.

๋ฌธ์ œ - ๊ณ ๊ธ‰9 (์•„์šฐํ„ฐ ์กฐ์ธ ์•ˆํ•ด์„œ ํ‹€๋ฆผ)

  1. ๋ฌธ์ œ

    ๊ฐ ๊ณ ๊ฐ๋ณ„๋กœ ๋ชจ๋“  ์ฃผ๋ฌธ์— ๋Œ€ํ•œ ํ‰๊ท  ์ฃผ๋ฌธ ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•˜์„ธ์š”.

  2. ๋‚˜์˜ ์ฟผ๋ฆฌ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     select c.name, avg(mi.price*od.quantity) 
     from customers c 
     left join reservations r 
     on c.customer_id = r.customer_id 
     left join orders o 
     on r.reservation_id = o.reservation_id 
     left join orderdetails od
     on od.order_id = o.order_id
     left join menuitems mi 
     on mi.menu_item_id =od.menu_item_id 
     group by c.name;
    

    ๊ณ ๊ฐ์ด null ๊ฐ’์„ ๊ฐ€์งˆ ๋•Œ๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผํ•˜๋ฏ€๋กœ ์•„์šฐํ„ฐ ์กฐ์ธ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

    โ†’ ์•„์šฐํ„ฐ ์กฐ์ธ ์‚ฌ์šฉ์‹œ null ๊ฐ’ ๋ฐœ์ƒ

  3. Reference

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     select c.name, coalesce(avg(mi.price * od.quantity), 0) 
     from customers c 
     left join reservations as r
     on r.customer_id = c.customer_id 
     left join orders o 
     on o.reservation_id = r.reservation_id 
     left join orderdetails as od
     on od.order_id = o.order_id 
     left join menuitems as mi
     on mi.menu_item_id = od.menu_item_id
     group by c.name;
    

    coalesce์‚ฌ์šฉํ•ด์„œ ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ.

    โœจcoalesce( ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ) : coalesce๋Š” null์ด ์•„๋‹ ๋•Œ๋Š” ์™ผ์ชฝ, null์ผ ๋•Œ๋Š” ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ.

Database ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment