โ๐ป programmers Lv2. MySQL 7๋ฌธ์ (24.10.21)
โ๐ป programmers Lv2. MySQL 7๋ฌธ์ (24.10.21)
programmers Lv2. MySQL 7๋ฌธ์ (24.10.21)
50) ๊ฐ๊ฒฉ๋ ๋ณ ์ํ ๊ฐ์ ๊ตฌํ๊ธฐ
PRODUCT
ํ ์ด๋ธ์์ ๋ง์ ๋จ์์ ๊ฐ๊ฒฉ๋ ๋ณ๋ก ์ํ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ SQL ๋ฌธ์ ์์ฑ. ์ด๋ ์ปฌ๋ผ๋ช ์ ๊ฐ๊ฐ ์ปฌ๋ผ๋ช ์ PRICE_GROUP, PRODUCTS๋ก ์ง์ ํด์ฃผ์๊ณ ๊ฐ๊ฒฉ๋ ์ ๋ณด๋ ๊ฐ ๊ตฌ๊ฐ์ ์ต์๊ธ์ก(10,000์ ์ด์ ~ 20,000 ๋ฏธ๋ง์ธ ๊ตฌ๊ฐ์ธ ๊ฒฝ์ฐ 10,000)์ผ๋ก ํ์.
1
2
3
4
5
6
7
SELECT ( CASE
WHEN PRICE < 10000 THEN 0
ELSE TRUNCATE(PRICE, -4)
END) AS PRICE_GROUP, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC;
๊ฐ๊ฒฉ์ด 10,000๋ณด๋ค ์์ ์ ํ ๋ชจ๋ 0์ผ๋ก ๊ทธ๋ฃนํ :
WHEN PRICE < 10000 THEN 0
๊ฐ๊ฒฉ์ด 10,000 ์ด์์ธ ๊ฒฝ์ฐ์๋
TRUNCATE(PRICE, -4)
๋ฅผ ์ฌ์ฉํด ๊ฐ๊ฒฉ์ 10,000 ๋จ์๋ก ์๋ฆ.TRUNCATE
๋ 10,000์ ๋จ์๋ก๋ฒ๋ฆผ
์ฒ๋ฆฌ๋ฅผ ํด์ค.
51) ๋ฌผ๊ณ ๊ธฐ ์ข ๋ฅ ๋ณ ์ก์ ์ ๊ตฌํ๊ธฐ
FISH_NAME_INFO
์์ ๋ฌผ๊ณ ๊ธฐ์ ์ข ๋ฅ ๋ณ ๋ฌผ๊ณ ๊ธฐ์ ์ด๋ฆ๊ณผ ์ก์ ์๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑ. ๋ฌผ๊ณ ๊ธฐ์ ์ด๋ฆ ์ปฌ๋ผ๋ช ์FISH_NAME
, ์ก์ ์ ์ปฌ๋ผ๋ช ์FISH_COUNT
๋ก ํ๊ณ
๊ฒฐ๊ณผ๋ ์ก์ ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
1
2
3
4
5
SELECT COUNT(*) AS FISH_COUNT, B.FISH_NAME
FROM FISH_INFO A
JOIN FISH_NAME_INFO B ON A.FISH_TYPE = B.FISH_TYPE
GROUP BY FISH_NAME
ORDER BY 1 DESC;
- ํ๋ ธ๋ ๋ถ๋ถ : ๋น์ฐํ FISH_NAME์ผ๋ก ๊ทธ๋ฃนํ๋ฅผ ํด์ผ๋๋๋ฐ ์ด๋ฆ์ผ๋ก ๊ทธ๋ฃนํ๋ ๋ฌผ๊ณ ๊ธฐ ์๋ก ๊ณ์ ๊ทธ๋ฃนํ๋ฅผ ์๋ํ์์. ๊ฐฏ์๋ฅผ ๋จผ์ ๊ทธ๋ฃนํ ์ํค๋ ๋ง๋ ์๋๋..๊ฒ์ ๊ณ์ ์๋ํ๋ ๊ฒ.
52) ROOT ์์ดํ ๊ตฌํ๊ธฐ
- ROOT ์์ดํ ์ ์ฐพ์ ์์ดํ ID(ITEM_ID), ์์ดํ ๋ช (ITEM_NAME)์ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑ
1
2
3
4
SELECT A.ITEM_ID, A.ITEM_NAME
FROM ITEM_INFO A
JOIN ITEM_TREE B ON A.ITEM_ID = B.ITEM_ID
WHERE B.PARENT_ITEM_ID IS NULL;
53) ์ฐ๋ ๋ณ ํ๊ท ๋ฏธ์ธ๋จผ์ง ๋๋ ์กฐํํ๊ธฐ
AIR_POLLUTION
ํ ์ด๋ธ์์ ์์ ์ง์ญ์ ์ฐ๋ ๋ณ ํ๊ท ๋ฏธ์ธ๋จผ์ง ์ค์ผ๋์ ํ๊ท ์ด๋ฏธ์ธ๋จผ์ง ์ค์ผ๋๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ. ์ด๋, ํ๊ท ๋ฏธ์ธ๋จผ์ง ์ค์ผ๋์ ํ๊ท ์ด๋ฏธ์ธ๋จผ์ง ์ค์ผ๋์ ์ปฌ๋ผ๋ช ์ ๊ฐ๊ฐPM10
,PM2.5
๋ก ํด ์ฃผ์๊ณ , ๊ฐ์ ์์ ์ ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ. ๊ฒฐ๊ณผ๋ ์ฐ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
1
2
3
4
5
SELECT YEAR(YM) AS 'YEAR', ROUND(AVG(PM_VAL1),2) AS 'PM10', ROUND(AVG(PM_VAL2),2) AS 'PM2.5'
FROM AIR_POLLUTION
WHERE LOCATION2 LIKE '์์'
GROUP BY YEAR
ORDER BY YEAR;
- ์ฐ๋๋ณ ํ๊ท ๊ณ์ฐ ๊ฐ์ ๊ตฌํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฃนํ ํด์ผ ํจ!
54) ์๋ณ ์ก์ ๋ฌผ๊ณ ๊ธฐ ์ ๊ตฌํ๊ธฐ
- ์๋ณ ์ก์ ๋ฌผ๊ณ ๊ธฐ์ ์์ ์์ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑ. ์ก์ ๋ฌผ๊ณ ๊ธฐ ์ ์ปฌ๋ผ๋ช
์
FISH_COUNT
, ์ ์ปฌ๋ผ๋ช ์MONTH
๋ก ํ๊ณ ๊ฒฐ๊ณผ๋ ์์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
1
2
3
4
SELECT COUNT(*) AS 'FISH_COUNT',MONTH(TIME) AS 'MONTH'
FROM FISH_INFO
GROUP BY MONTH
ORDER BY MONTH;
55) ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ค๊ณ ๊ฑฐ๋ ์ํ ์กฐํํ๊ธฐ
USED_GOODS_BOARD
ํ ์ด๋ธ์์ 2022๋ 10์ 5์ผ์ ๋ฑ๋ก๋ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์๋ฌผ์ ๊ฒ์๊ธ ID, ์์ฑ์ ID, ๊ฒ์๊ธ ์ ๋ชฉ, ๊ฐ๊ฒฉ, ๊ฑฐ๋์ํ๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ. ๊ฑฐ๋์ํ๊ฐ SALE ์ด๋ฉด ํ๋งค์ค, RESERVED์ด๋ฉด ์์ฝ์ค, DONE์ด๋ฉด ๊ฑฐ๋์๋ฃ ๋ถ๋ฅํ์ฌ ์ถ๋ ฅํด์ฃผ์๊ณ , ๊ฒฐ๊ณผ๋ ๊ฒ์๊ธ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ.
1
2
3
4
5
6
7
8
9
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
(CASE
WHEN STATUS = 'SALE' THEN 'ํ๋งค์ค'
WHEN STATUS = 'RESERVED' THEN '์์ฝ์ค'
WHEN STATUS = 'DONE' THEN '๊ฑฐ๋์๋ฃ'
END) AS 'STATUS'
FROM USED_GOODS_BOARD
WHERE CREATED_DATE LIKE '2022-10-05'
ORDER BY BOARD_ID DESC;
56) ์ฌ๊ตฌ๋งค๊ฐ ์ผ์ด๋ ์ํ๊ณผ ํ์ ๋ฆฌ์คํธ ๊ตฌํ๊ธฐ
ONLINE_SALE
ํ ์ด๋ธ์์ ๋์ผํ ํ์์ด ๋์ผํ ์ํ์ ์ฌ๊ตฌ๋งคํ ๋ฐ์ดํฐ๋ฅผ ๊ตฌํ์ฌ, ์ฌ๊ตฌ๋งคํ ํ์ ID์ ์ฌ๊ตฌ๋งคํ ์ํ ID๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑ. ๊ฒฐ๊ณผ๋ ํ์ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ํ์ ID๊ฐ ๊ฐ๋ค๋ฉด ์ํ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ.
1
2
3
4
5
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >=2
ORDER BY USER_ID ASC, PRODUCT_ID DESC;
์ฌ๊ตฌ๋งคํ๋ ๊ฒ์ ์ด๋ป๊ฒ ํํํ ๊น? ํ๋๋ฐ
USER_ID
์PRODUCT_ID
๊ฐ ํ์ ์์ด๋, ์ ํ ์์ด๋๋ก ์ค์ ๋๊ณ ํด๋น ํ๋๋ฅผ ๊ทธ๋ฃนํํ๋ฉด ๋ฌถ์ด๊ฒ ๋๋ค.COUNT(*)
๋ ๊ฐ ๊ทธ๋ฃน์ ํ์ ์๋ฅผ ๊ณ์ฐํ๊ณ ๊ทธ ๊ฐ์ด 2์ด์์ธ ๊ฒฝ์ฐ๋ฅผ ์ถ๋ ฅํ ๊ฒ์ด๋ค.
This post is licensed under CC BY 4.0 by the author.