*Oracle ๊ธฐ์ค
13. ์ง๋ฃ๊ณผ๋ณ ์ด ์์ฝ ํ์ ์ถ๋ ฅํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/132202 )
APPOINTMENT ํ ์ด๋ธ์์ 2022๋ 5์์ ์์ฝํ ํ์ ์๋ฅผ ์ง๋ฃ๊ณผ์ฝ๋ ๋ณ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋, ์ปฌ๋ผ๋ช ์ '์ง๋ฃ๊ณผ ์ฝ๋', '5์์์ฝ๊ฑด์'๋ก ์ง์ ํด์ฃผ์๊ณ ๊ฒฐ๊ณผ๋ ์ง๋ฃ๊ณผ๋ณ ์์ฝํ ํ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ณ , ์์ฝํ ํ์ ์๊ฐ ๊ฐ๋ค๋ฉด ์ง๋ฃ๊ณผ ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT MCDP_CD AS "์ง๋ฃ๊ณผ ์ฝ๋", COUNT(*) AS "5์์์ฝ๊ฑด์"
FROM APPOINTMENT
WHERE TO_CHAR(APNT_YMD, 'YYYY-MM') = '2022-05'
GROUP BY MCDP_CD
ORDER BY COUNT(*) ASC, MCDP_CD ASC;
14. ์๋์ฐจ ์ข ๋ฅ ๋ณ ํน์ ์ต์ ์ด ํฌํจ๋ ์๋์ฐจ ์ ๊ตฌํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/151137 )
CAR_RENTAL_COMPANY_CAR ํ ์ด๋ธ์์ 'ํตํ์ํธ', '์ด์ ์ํธ', '๊ฐ์ฃฝ์ํธ' ์ค ํ๋ ์ด์์ ์ต์ ์ด ํฌํจ๋ ์๋์ฐจ๊ฐ ์๋์ฐจ ์ข ๋ฅ ๋ณ๋ก ๋ช ๋์ธ์ง ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์๋์ฐจ ์์ ๋ํ ์ปฌ๋ผ๋ช ์ CARS๋ก ์ง์ ํ๊ณ , ๊ฒฐ๊ณผ๋ ์๋์ฐจ ์ข ๋ฅ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT CAR_TYPE, COUNT(*) CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%ํตํ์ํธ%' OR OPTIONS LIKE '%์ด์ ์ํธ%' OR OPTIONS LIKE '%๊ฐ์ฃฝ์ํธ%'
GROUP BY CAR_TYPE
ORDER BY 1 ASC;
15. ์ํ ๋ณ ์คํ๋ผ์ธ ๋งค์ถ ๊ตฌํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/131533 )
PRODUCT ํ ์ด๋ธ๊ณผ OFFLINE_SALE ํ ์ด๋ธ์์ ์ํ์ฝ๋ ๋ณ ๋งค์ถ์ก(ํ๋งค๊ฐ * ํ๋งค๋) ํฉ๊ณ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ๋งค์ถ์ก์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ๋งค์ถ์ก์ด ๊ฐ๋ค๋ฉด ์ํ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT PRODUCT_CODE, SUM(SALES_AMOUNT*PRICE) SALES
FROM PRODUCT P
JOIN OFFLINE O
ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY PRODUCT_CODE
ORDER BY SALES DESC, PRODUCT_CODE ASC;
- ์ฒ์์ ์ฌ๊ธฐ์ ์ข ๋งํ์๋ค... ์ง๊ธ์ ๊ฒจ์ฐ ํ์๊ณ ์ดํด๋ ๋๋ค์ง๋ง ํ์ฐธ ๋ค์ ๋ค์ ํ๋ผ๊ณ ํ๋ฉด ๋ชปํ๋ฏ..
- ์ฐ์ JOIN์ ์์ผ์ฃผ๊ณ , PRODUCT_CODE๋ก GROUP BYํ๋๊ฑด ์๊ฒ ๋๋ฐ SUM ํจ์๋ฅผ ์๊ฐํ๊ธฐ๊ฐ ํ๋ค์๋ ๊ฒ ๊ฐ๋ค.
16. ๋ฃจ์์ ์๋ผ ์ฐพ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/59046 )
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค ์ด๋ฆ์ด Lucy, Ella, Pickle, Rogan, Sabrina, Mitty์ธ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ๋ฅผ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', "Mitty')
ORDER BY ANIMAL_ID ASC;
17. ์กฐ๊ฑด์ ๋ง๋ ๋์์ ์ ์ ๋ฆฌ์คํธ ์ถ๋ ฅํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/144854 )
'๊ฒฝ์ ' ์นดํ ๊ณ ๋ฆฌ์ ์ํ๋ ๋์๋ค์ ๋์ ID(BOOK_ID), ์ ์๋ช (AUTHOR_NAME), ์ถํ์ผ(PUBLISHED_DATE) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ์ถํ์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT BOOK_ID, AUTHOR_NAME, TO_CHAR(PUBLISHED_DATE, 'YYYY-MM-DD') PUBLISHED_DATE
FROM BOOK B
JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE CATEGORY = '๊ฒฝ์ '
ORDER BY PUBLISHED_DATE ASC;
18. ์ฑ๋ถ์ผ๋ก ๊ตฌ๋ถํ ์์ด์คํฌ๋ฆผ ์ด ์ฃผ๋ฌธ๋ ( https://school.programmers.co.kr/learn/courses/30/lessons/133026 )
์๋ฐ๊ธฐ ๋์ ๊ฐ ์์ด์คํฌ๋ฆผ ์ฑ๋ถ ํ์ ๊ณผ ์ฑ๋ถ ํ์ ์ ๋ํ ์์ด์คํฌ๋ฆผ์ ์ด์ฃผ๋ฌธ๋์ ์ด์ฃผ๋ฌธ๋์ด ์์ ์์๋๋ก ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ด์ฃผ๋ฌธ๋์ ๋ํ๋ด๋ ์ปฌ๋ผ๋ช ์ TOTAL_ORDER๋ก ์ง์ ํด์ฃผ์ธ์.
SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF F
JOIN ICECREAM_INFO I
ON F.FLAVOR = I.FLAVOR
GROUP BY INGREDIENT_TYPE
ORDER BY TOTAL_ORDER;
19. ๊ฐ๊ฒฉ๋ ๋ณ ์ํ ๊ฐ์ ๊ตฌํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/131530 )
PRODUCT ํ ์ด๋ธ์์ ๋ง์ ๋จ์์ ๊ฐ๊ฒฉ๋ ๋ณ๋ก ์ํ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ปฌ๋ผ๋ช ์ ๊ฐ๊ฐ ์ปฌ๋ผ๋ช ์ PRICE_GROUP, PRODUCTS๋ก ์ง์ ํด์ฃผ์๊ณ ๊ฐ๊ฒฉ๋ ์ ๋ณด๋ ๊ฐ ๊ตฌ๊ฐ์ ์ต์๊ธ์ก(10,000์ ์ด์ ~ 20,000 ๋ฏธ๋ง์ธ ๊ตฌ๊ฐ์ธ ๊ฒฝ์ฐ 10,000)์ผ๋ก ํ์ํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ๊ฐ๊ฒฉ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT TRUNC(PRICE, -4) AS PRICE_GROUP, COUNT(*)
FROM PRODUCT
GROUP BY TRUNC(PRICE, -4)
ORDER BY 1 ASC;
- TRUNC ํจ์๋ ์ซ์๋ ์๊ฐ, ์ผ์, ์์ผ, ์์์ ์ ์ ์ฌํ๋ ํจ์์ด๋ค.
- ์์ SELECT๋ฌธ์ ๊ฒฝ์ฐ์๋ 12345์์ด๋ผ๋ ๊ฐ๊ฒฉ์ด ์๋ค๋ฉด ์ต์ ์ผ๋ก -4๋ฅผ ์ ๋ ฅํ์ผ๋ฏ๋ก ๋ค์์ 4์๋ฆฌ๊น์ง ์ ์ฌํ๊ณ ์ด๊ธฐ๊ฐ์ธ '0'์ ๋ฃ์ด 10000์ด ๋๋ค.
- SUBSTR ํจ์๋ฅผ ์ด์ฉํ๊ฑฐ๋ FLOOR ํจ์๋ฅผ ์ด์ฉํด 10000์ ๋๋๊ณ ๋ค์ 10000์ ๊ณฑํ๋ ํ์์ผ๋ก ๋์ ํํํ ์๋ ์์ ๊ฒ ๊ฐ๋ค.
20. 3์์ ํ์ด๋ ์ฌ์ฑ ํ์ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/131120 )
MEMBER_PROFILE ํ ์ด๋ธ์์ ์์ผ์ด 3์์ธ ์ฌ์ฑ ํ์์ ID, ์ด๋ฆ, ์ฑ๋ณ, ์๋ ์์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ ํ๋ฒํธ๊ฐ NULL์ธ ๊ฒฝ์ฐ๋ ์ถ๋ ฅ๋์์์ ์ ์ธ์์ผ ์ฃผ์๊ณ , ๊ฒฐ๊ณผ๋ ํ์ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT MEMBER_ID, MEMBER_NAME, GENDER, TO_CHAR(DATE_OF_BIRTH, 'YYYY-MM-DD')
FROM MEMBER_PROFILE
WHERE TLNO IS NOT NULL AND GENDER = 'W' AND TO_CHAR(DATE_OF_BIRTH, 'MM') = '03'
ORDER BY MEMBER_ID ASC;
21. ์ฌ๊ตฌ๋งค๊ฐ ์ผ์ด๋ ์ํ๊ณผ ํ์ ๋ฆฌ์คํธ ๊ตฌํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/131536 )
ONLINE_SALE ํ ์ด๋ธ์์ ๋์ผํ ํ์์ด ๋์ผํ ์ํ์ ์ฌ๊ตฌ๋งคํ ๋ฐ์ดํฐ๋ฅผ ๊ตฌํ์ฌ, ์ฌ๊ตฌ๋งคํ ํ์ ID์ ์ฌ๊ตฌ๋งคํ ์ํ ID๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ํ์ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ํ์ ID๊ฐ ๊ฐ๋ค๋ฉด ์ํ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(PRODUCT_ID) > 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC;
- GROUP BY์ ์ปฌ๋ผ์ด ๋๊ฐ ์ด์ ๋ค์ด๊ฐ๋ ์ด์ ๋ ๋๋๋ ๊ธฐ์ค์ด ๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- 1) ๋จผ์ ๊ฐ์ USER_ID์ฌ์ผํ๊ณ
- 2) ๊ฐ์ PRODUCT_ID๋ผ๋ฆฌ ๋ ๋ฌถ์ด์ผํ๊ธฐ ๋๋ฌธ์
- GROUP BY์ USER_ID, PRODUCT_ID ๋ ์ปฌ๋ผ์ด ๋ค์ด๊ฐ๋ ๊ฒ์ด๋ค.
22. ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ค๊ณ ๊ฑฐ๋ ์ํ ์กฐํํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/164672 )
USED_GOODS_BOARD ํ ์ด๋ธ์์ 2022๋ 10์ 5์ผ์ ๋ฑ๋ก๋ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์๋ฌผ์ ๊ฒ์๊ธ ID, ์์ฑ์ ID, ๊ฒ์๊ธ ์ ๋ชฉ, ๊ฐ๊ฒฉ, ๊ฑฐ๋์ํ๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฑฐ๋์ํ๊ฐ SALE ์ด๋ฉด ํ๋งค์ค, RESERVED์ด๋ฉด ์์ฝ์ค, DONE์ด๋ฉด ๊ฑฐ๋์๋ฃ ๋ถ๋ฅํ์ฌ ์ถ๋ ฅํด์ฃผ์๊ณ , ๊ฒฐ๊ณผ๋ ๊ฒ์๊ธ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
CASE
WHEN STATUS = 'SALE' THEN 'ํ๋งค์ค'
WHEN STATUS = 'RESERVED' THEN '์์ฝ์ค'
ELSE '๊ฑฐ๋์๋ฃ'
END AS STATUS
FROM USED_GOODS_BOARD
WHERE TO_CHAR(CREATED_DATE, 'YYYY-MM-DD') = '2022-10-05'
ORDER BY BOARD_ID DESC;
23. ์๋์ฐจ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ ๊ตฌํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/157342 )
CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ์์ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ด 7์ผ ์ด์์ธ ์๋์ฐจ๋ค์ ์๋์ฐจ ID์ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ(์ปฌ๋ผ๋ช : AVERAGE_DURATION) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ ์์์ ๋๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ๊ณ , ๊ฒฐ๊ณผ๋ ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ , ํ๊ท ๋์ฌ ๊ธฐ๊ฐ์ด ๊ฐ์ผ๋ฉด ์๋์ฐจ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT CAR_ID, ROUND(AVG(END_DATE-START_DATE+1), 1) AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVG(END_DATE-START_DATE)>6
ORDER BY 2 DESC, 1 DESC;
'๋ฐ์ดํฐ๋ฒ ์ด์ค, SQL > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 3 (2) (2) | 2023.06.29 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 3 (1) (0) | 2023.06.29 |
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 2 (1) (0) | 2023.06.28 |
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 1 (2) (0) | 2023.06.28 |
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 1 (1) (0) | 2023.06.23 |