โ๐ป programmers Lv2. MySQL 7๋ฌธ์ (24.10.22)
programmers Lv2. MySQL 7๋ฌธ์ (24.10.22)
57) ์กฐ๊ฑด์ ๋ง๋ ์ฌ์ ์ ๋ณด ์กฐํํ๊ธฐ
HR_DEPARTMENT
,HR_EMPLOYEES
,HR_GRADE
ํ ์ด๋ธ์์ 2022๋ ๋ ํํด ํ๊ฐ ์ ์๊ฐ ๊ฐ์ฅ ๋์ ์ฌ์ ์ ๋ณด๋ฅผ ์กฐํํ๋ ค ํ๋ค. 2022๋ ๋ ํ๊ฐ ์ ์๊ฐ ๊ฐ์ฅ ๋์ ์ฌ์๋ค์ ์ ์, ์ฌ๋ฒ, ์ฑ๋ช , ์ง์ฑ , ์ด๋ฉ์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ. 2022๋ ๋์ ํ๊ฐ ์ ์๋ ์,ํ๋ฐ๊ธฐ ์ ์์ ํฉ์ ์๋ฏธํ๊ณ , ํ๊ฐ ์ ์๋ฅผ ๋ํ๋ด๋ ์ปฌ๋ผ์ ์ด๋ฆ์SCORE
๋ก.
1
2
3
4
5
6
7
8
SELECT SUM(SCORE) AS 'SCORE', B.EMP_NO, B.EMP_NAME, B.POSITION, B.EMAIL
FROM HR_DEPARTMENT A
JOIN HR_EMPLOYEES B ON A.DEPT_ID = B.DEPT_ID
JOIN HR_GRADE C ON B.EMP_NO = C.EMP_NO
WHERE C.YEAR = 2022
GROUP BY B.EMP_NO
ORDER BY SCORE DESC
LIMIT 1;
58) ์๋์ฐจ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ ๊ตฌํ๊ธฐ
ROUND๋ ๋ฐ์ฌ๋ฆผ์ ํ๊ธฐ ์ํด ์ฌ์ฉ
DATEDIFF๋ ๋ ์ง๋ฅผ ์ด์ฉํด ๋์ฌ ๊ธฐ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด ์ฌ์ฉ
1
2
3
4
5
6
SELECT CAR_ID,
ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS 'AVERAGE_DURATION'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVG(DATEDIFF(END_DATE, START_DATE)+1) >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
DATEDIFF(END_DATE, START_DATE)+1
์ฌ๊ธฐ์ +1์ ํ๋ ์ด์ ๋ ์๋ฅผ ๋ค์ด2024-10-01
์ด ๋์ฌ ์์์ผ,2024-10-03
์ด ๋์ฌ ์ข ๋ฃ์ผ์ด๋ผ๊ณ ํ ๋3-1=2
์ด๋ค. ํ์ง๋ง ์ด ๋์ฌ์ผ์ 3์ด ๋์ด์ผํ๋ฏ๋ก+1
์ ํ๋ ๊ฒ์ด๋ค.
59) ํน์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์ ์ด ์ ๊ตฌํ๊ธฐ
1
2
3
4
SELECT COUNT(A.FISH_TYPE) AS 'FISH_COUNT'
FROM FISH_INFO A
JOIN FISH_NAME_INFO B ON A.FISH_TYPE = B.FISH_TYPE
WHERE B.FISH_NAME LIKE 'BASS' OR B.FISH_NAME LIKE 'SNAPPER'
- ์ด๋ ค์ด ๋ถ๋ถ ์์์.
60) ๋ ธ์ ๋ณ ํ๊ท ์ญ ์ฌ์ด ๊ฑฐ๋ฆฌ ์กฐํํ๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
// ํ๋ฆฐ ์ฝ๋
SELECT ROUTE, CONCAT(ROUND(SUM(D_BETWEEN_DIST),1),"km") AS 'TOTAL_DISTANCE', CONCAT(ROUND(AVG(D_BETWEEN_DIST),2),"km") AS 'AVERAGE_DISTANCE'
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY TOTAL_DISTANCE DESC;
// ๋ง์ ์ฝ๋
SELECT ROUTE,
CONCAT(ROUND(SUM(D_BETWEEN_DIST),1),'km') AS 'TOTAL_DISTANCE', CONCAT(ROUND(AVG(D_BETWEEN_DIST),2),'km') AS 'AVERAGE_DISTANCE'
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY ROUND(SUM(D_BETWEEN_DIST),1) DESC;
CONCAT() : ๋ฌธ์์ด ๋ถ์ด๋ ๋ฉ์๋
์ ๋ฒ์ CONnect + CAT : ๊ณ ์์ด๊ฐ ๊ท์ฝ๊ฒ ์ฐ๊ฒฐ๋ผ์ ๋ฌธ์๋ฅผ ๋ถ์ธ๋ค๋ก ์ธ์ ๋๋ฐ ์๊ฐ์ด ์ ๋์
RIGHT
๋ ํผ๋ํจ.RIGHT
๋ ์ค๋ฅธ์ชฝ ๋ช ๊ธ์ ์ถ์ถํ ๋ ์ฐ์.
CONCAT()์ ์ด์ฉํด ๋ฌธ์๋ก ๋ณ๊ฒฝ๋์์ผ๋ฏ๋ก ์ ๋ ฌ์ด ์๋ง๊ฒ ๋์ง ์๋๋ค. ๋ฐ๋ผ์ CONCAT()์ ๋บ ์ํ๋ก ์ ๋ ฌ ํด์ผ๋๋ค.
61) ๋ถ๊ธฐ๋ณ ๋ถํ๋ ๋์ฅ๊ท ์ ๊ฐ์ฒด ์ ๊ตฌํ๊ธฐ
1
2
3
4
5
SELECT CONCAT(QUARTER(DIFFERENTIATION_DATE),'Q') AS 'QUARTER',
COUNT(*) AS 'ECOLI_COUNT'
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER
QUARTER() ๋ฉ์๋๋ ์ฃผ์ด์ง ๋ ์ง๊ฐ ์ํ๋ ๋ถ๊ธฐ๋ฅผ ๋ฐํํ๋ค. ๋ถ๊ธฐ๋ 1๋ ์ ๋ค ๊ฐ์ ๊ตฌ๊ฐ์ผ๋ก ๋๋ ๊ฒ์ด๋ฉฐ
- 1๋ถ๊ธฐ (Q1): 1์ 1์ผ ~ 3์ 31์ผ
- 2๋ถ๊ธฐ (Q2): 4์ 1์ผ ~ 6์ 30์ผ
- 3๋ถ๊ธฐ (Q3): 7์ 1์ผ ~ 9์ 30์ผ
4๋ถ๊ธฐ (Q4): 10์ 1์ผ ~ 12์ 31์ผ
- ๋ก ๋ํ๋ธ๋ค.
62) ์ ๊ทธ๋ ์ด๋ ๋ ์์ดํ ๊ตฌํ๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
SELECT A.ITEM_ID, A.ITEM_NAME, A.RARITY
FROM ITEM_INFO A
JOIN ITEM_TREE B ON A.ITEM_ID = B.ITEM_ID
WHERE
B.PARENT_ITEM_ID IN
(
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE'
)
ORDER BY A.ITEM_ID DESC;
๋จผ์ ๋ฌธ์ ๊ฐ ์ดํด๊ฐ ์ ๋ผ์ ํ์ฐธ์ ๊ณ ๋ฏผํ๋ค.
์์ดํ ์ ํฌ๊ท๋๊ฐ โRAREโ์ธ ์์ดํ ๋ค์ ๋ชจ๋ ๋ค์ ์ ๊ทธ๋ ์ด๋ ์์ดํ ์ ์์ดํ ID(ITEM_ID), ์์ดํ ๋ช (ITEM_NAME), ์์ดํ ์ ํฌ๊ท๋(RARITY)๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ธ๋ฐ
ITEM_ID | PARENT_ITEM_ID |
---|---|
0 | NULL |
1 | 0 |
2 | 0 |
3 | 1 |
4 | 1 |
ITEM_ID | ITEM_NAME | RARITY | PRICE |
---|---|---|---|
0 | ITEM_A | RARE | 10000 |
1 | ITEM_B | RARE | 9000 |
2 | ITEM_C | LEGEND | 11000 |
3 | ITEM_D | RARE | 10000 |
4 | ITEM_E | RARE | 12000 |
ํด๋น ํ๋ ITEM_TREE ํ ์ด๋ธ์ PARENT_ITEM_ID ํ๋๊ฐ 0์ธ ๊ฒ์ ITEM_ID๊ฐ 1, 2 ์ด๊ณ ์ด๊ฒ์ ITEM_A๊ฐ ITEM_B์ ITEM_C๋ก ์ ๊ทธ๋ ์ด๋ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๊ณ ITEM_B๊ฐ ITEM_D์ ITEM_E๋ก ์ ๊ทธ๋ ์ด๋ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
์ด๊ฒ์ ์ ๊ทธ๋ ์ด๋ ํ๊ธฐ ์ ์ ITEM_ID์ RARITY๊ฐ โRAREโ์ด์ผ ๋๊ณ ์ฆ, ๋ค์ ๋งํด ๋ถ๋ชจ ์์ดํ ์ด ํฌ๊ท๋๊ฐ โRAREโ์ธ ์์ดํ ์ด์ด์ผ ๋๋ค. ๋ฐ๋ผ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ ๊ทธ๋ ์ด๋ ์ RARITY๊ฐ โRAREโ์ธ ๊ฒ์ ํ์ํ๋ค.
63) ์กฐ๊ฑด์ ๋ง๋ ๊ฐ๋ฐ์ ์ฐพ๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (
SELECT CODE
FROM SKILLCODES
WHERE NAME LIKE 'Python')
OR SKILL_CODE & (
SELECT CODE
FROM SKILLCODES
WHERE NAME LIKE 'C#')
ORDER BY ID ASC;
SKILL_CODE & ์ฐ์ฐ์ ๋นํธwise AND ์ฐ์ฐ์๋ก, ๋ ๊ฐ์ ๋นํธ๊ฐ ๋ชจ๋ 1์ธ ๊ฒฝ์ฐ์๋ง 1์ ๋ฐํํ๋ค.
๊ณผ์ฐ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ํฉ์ ์ธ์ ์ผ๊น?
ํํฐ๋ง ์กฐ๊ฑด์ ํ์ํ ๊ฐ์ด ๋ค๋ฅธ ํ ์ด๋ธ์ ์์ ๋
- ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ ๋ค๋ฅธ ํ ์ด๋ธ์์ ๊ฐ์ ธ์์ผ ํ ๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.