[SQL] Practice 3
Categories: Database
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
sql - ์ถ๊ฐ๋ก ์๊ฒ ๋ ๊ฒ
- DATETIME ์๋ถ์ด๊น์ง ๋์ด.
- TEXT ์ค๋๊น ๊ฐ๋ฅ, ๊ธธ์ด์ ํ ์์
- Between A and B ์ ๊ฒฝ์ฐ B๋ ํฌํจ๋์ง ์์.
- โจcoalesce( ์ผ์ชฝ, ์ค๋ฅธ์ชฝ) โ coalesce๋ null์ด ์๋ ๋๋ ์ผ์ชฝ, null์ผ ๋๋ ์ค๋ฅธ์ชฝ ๊ฐ์ ๋ฐํํจ.
๋ ์คํ ๋ ์์ฝ์์คํ
๋ฌธ์ - ๊ณ ๊ธ2
-
๋ฌธ์
ํน์ ๊ธฐ๊ฐ ๋์์ ์ด ์์ฝ ์๋ฅผ ๊ณ์ฐํ์ธ์. (์: 2024๋ 5์ 1์ผ๋ถํฐ 5์ 31์ผ๊น์ง)
-
๋์ ์ฟผ๋ฆฌ
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
-
๋ฌธ์
ํน์ ๊ณ ๊ฐ(์: ๊ณ ๊ฐ ID๊ฐ 3)์ ์ด ์ฃผ๋ฌธ ๊ธ์ก์ ๊ณ์ฐํ์ธ์.
-
๋์ ์ฟผ๋ฆฌ
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๊น์ง ์กฐ์ธํ๋ฉด ๋จ.
-
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 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 ;
-
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 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 ๊ฐ ๋ฐ์
-
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์ผ ๋๋ ์ค๋ฅธ์ชฝ ๊ฐ์ ๋ฐํํจ.
Leave a comment