โ๐ป 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.