SQL (10) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [programmers] 5์ ์ํ๋ค์ ์ด๋งค์ถ ์กฐํํ๊ธฐ ๋ฌธ์ FOOD_PRODUCT์ FOOD_ORDER ํ ์ด๋ธ์์ ์์ฐ์ผ์๊ฐ 2022๋ 5์์ธ ์ํ๋ค์ ์ํ ID, ์ํ ์ด๋ฆ, ์ด๋งค์ถ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์ด๋งค์ถ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ์ด๋งค์ถ์ด ๊ฐ๋ค๋ฉด ์ํ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์. ํ์ด - ๋ ๊ฐ์ ํ ์ด๋ธ์์ ์ํ๋ ํ๋๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด JOIN ์ฌ์ฉ - ์ด๋งค์ถ์ SUM() ์ ์ฌ์ฉ(์๋*๊ฐ๊ฒฉ) - GROUP BY ๋ฅผ ์ฌ์ฉํด ID ๋ณ ํฉ๊ณ๋ฅผ ๊ตฌํจ - 2022-04-04 ํํ์ ๋ฐ์ดํฐ์์ ์ฐ๋์ ์๋ง ๋น๊ตํ๊ธฐ ์ํด YEAR(), MONTH() ์ฌ์ฉ - ORDER BY ๋ก ์ ๋ ฌ SELECT A.PRODUCT_ID, B.PRODUCT_NAME, (SUM(A.AMOUNT) * B.PRICE) AS TOTAL_SAL.. [programmers] ์์๋๋ฐ์ ์์์ต๋๋ค ๋ฌธ์ ๋ณดํธ ์์์ผ๋ณด๋ค ์ ์์ผ์ด ๋ ๋น ๋ฅธ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ์์์ผ์ด ๋น ๋ฅธ ์์ผ๋ก ์กฐํํด์ผํฉ๋๋ค. ํ์ด - ๋ ๊ฐ์ ํ ์ด๋ธ์์ ์ํ๋ ํ๋๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด JOIN(INNER JOIN) ์ฌ์ฉ - DATETIME ์ ๋น๊ต(๋ ์ง๋ ์ฐ์ฐ์๋ก ๋น๊ต ๊ฐ๋ฅ) - ์ ๋ ฌ SELECT INS.ANIMAL_ID, INS.NAME FROM ANIMAL_INS INS INNER JOIN ANIMAL_OUTS OUTS ON INS.ANIMAL_ID = OUTS.ANIMAL_ID WHERE INS.DATETIME > OUTS.DATETIME ORDER BY INS.DATETIME ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ.. [programmers] ์์ด์ง ๊ธฐ๋ก ์ฐพ๊ธฐ ๋ฌธ์ ์ฒ์ฌ์ง๋ณ์ผ๋ก ์ธํด ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์์ต๋๋ค. ์ ์์ ๊ฐ ๊ธฐ๋ก์ ์๋๋ฐ, ๋ณดํธ์์ ๋ค์ด์จ ๊ธฐ๋ก์ด ์๋ ๋๋ฌผ์ ID์ ์ด๋ฆ์ ID ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ํ์ด - ๋ ํ ์ด๋ธ์ ๋น๊ตํด ํ ์ชฝ์๋ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด LEFT OUTER JOIN ์ฌ์ฉ - IS NULL ์ ์ฌ์ฉํ์ฌ ID ๊ฐ ์๋ ๊ฐ๋ง ์กฐํ - ID ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ SELECT OUTS.ANIMAL_ID, OUTS.NAME FROM ANIMAL_OUTS OUTS LEFT JOIN ANIMAL_INS INS ON OUTS.ANIMAL_ID = INS.ANIMAL_ID WHERE INS.ANIMAL_ID IS NULL ORDER BY OUTS.ANIMAL_ID; ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ .. [programmers] ๋์ฌ ํ์๊ฐ ๋ง์ ์๋์ฐจ๋ค์ ์๋ณ ๋์ฌ ํ์ ๊ตฌํ๊ธฐ ๋ฌธ์ CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ์์ ๋์ฌ ์์์ผ์ ๊ธฐ์ค์ผ๋ก 2022๋ 8์๋ถํฐ 2022๋ 10์๊น์ง ์ด ๋์ฌ ํ์๊ฐ 5ํ ์ด์์ธ ์๋์ฐจ๋ค์ ๋ํด์ ํด๋น ๊ธฐ๊ฐ ๋์์ ์๋ณ ์๋์ฐจ ID ๋ณ ์ด ๋์ฌ ํ์(์ปฌ๋ผ๋ช : RECORDS) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ์์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ณ , ์์ด ๊ฐ๋ค๋ฉด ์๋์ฐจ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์. ํน์ ์์ ์ด ๋์ฌ ํ์๊ฐ 0์ธ ๊ฒฝ์ฐ์๋ ๊ฒฐ๊ณผ์์ ์ ์ธํด์ฃผ์ธ์. ํ์ด - WHERE ์กฐ๊ฑด์ ๋ค์ด๊ฐ SELECT ๋ฌธ์ ๋จผ์ ์์ฑ(subquery) - BETWEEN ์ ์ฌ์ฉํด ์ํ๋ ๊ธฐ๊ฐ ์ค์ - GROUP BY ๋ก ID ๋ก ๊ทธ๋ฃนํ ํ๊ณ , COUNT() ๋ก ๋ฐ์ดํฐ๊ฐ 5๊ฐ ์ด์์ธ ID ๋ง ์ถ๋ ฅํ๋๋ก ํจ *.. [programmers] ์นดํ ๊ณ ๋ฆฌ ๋ณ ๋์ ํ๋งค๋ ์ง๊ณํ๊ธฐ ๋ฌธ์ 2022๋ 1์์ ์นดํ ๊ณ ๋ฆฌ ๋ณ ๋์ ํ๋งค๋์ ํฉ์ฐํ๊ณ , ์นดํ ๊ณ ๋ฆฌ(CATEGORY), ์ด ํ๋งค๋(TOTAL_SALES) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ์นดํ ๊ณ ๋ฆฌ๋ช ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์. ํ์ด - ๋ ๊ฐ์ ํ ์ด๋ธ์์ ์ํ๋ ํ๋๋ฅผ ์กฐํํ๊ธฐ ์ํด INNER JOIN ์ฌ์ฉ - ํฉ๊ณ๋ฅผ ๊ตฌํ๊ธฐ ์ํด ์ง๊ณํจ์ SUM() ์ฌ์ฉ - 2022 ๋ 1์ ๋ฐ์ดํฐ๋ง ์กฐํํ๊ธฐ ์ํด LIKE ๋ก ์ฒดํฌ - GROUP BY ์ ์ง๊ณํจ์ ๊ทธ๋ฃนํ ๊ธฐ์ค ์์ฑ - ORDER BY ๋ก ์ค๋ฆ์ฐจ ์ ๋ ฌ SELECT b.CATEGORY, SUM(bs.SALES) AS TOTAL_SALES FROM BOOK b JOIN BOOK_SALES bs ON b.BOOK_ID = bs.BOOK_ID WHERE bs.SALES_.. [programmers] ๊ฐ๊ฒฉ์ด ์ ์ผ ๋น์ผ ์ํ์ ์ ๋ณด ์ถ๋ ฅํ๊ธฐ ๋ฌธ์ FOOD_PRODUCT ํ ์ด๋ธ์์ ๊ฐ๊ฒฉ์ด ์ ์ผ ๋น์ผ ์ํ์ ์ํ ID, ์ํ ์ด๋ฆ, ์ํ ์ฝ๋, ์ํ๋ถ๋ฅ, ์ํ ๊ฐ๊ฒฉ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ํ์ด - ์ต๋๊ฐ์ ๊ตฌํ๊ธฐ ์ํด MAX() ์ฌ์ฉ - ์ง๊ณํจ์๋ WHERE ์กฐ๊ฑด์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์๋ธ์ฟผ๋ฆฌ ํํ๋ก ์ฌ์ฉ ** HAVING ์์๋ ์ง๊ณ ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ SELECT * FROM FOOD_PRODUCT WHERE PRICE = (SELECT MAX(PRICE) PRICE FROM FOOD_PRODUCT); ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr [programmers] ๊ฐ๊ฒฉ๋ ๋ณ ์ํ ๊ฐ์ ๊ตฌํ๊ธฐ ๋ฌธ์ PRODUCT ํ ์ด๋ธ์์ ๋ง์ ๋จ์์ ๊ฐ๊ฒฉ๋ ๋ณ๋ก ์ํ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ปฌ๋ผ๋ช ์ ๊ฐ๊ฐ ์ปฌ๋ผ๋ช ์ PRICE_GROUP, PRODUCTS๋ก ์ง์ ํด์ฃผ์๊ณ ๊ฐ๊ฒฉ๋ ์ ๋ณด๋ ๊ฐ ๊ตฌ๊ฐ์ ์ต์๊ธ์ก(10,000์ ์ด์ ~ 20,000 ๋ฏธ๋ง์ธ ๊ตฌ๊ฐ์ธ ๊ฒฝ์ฐ 10,000)์ผ๋ก ํ์ํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ๊ฐ๊ฒฉ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์. ํ์ด - ๊ฐ๊ฒฉ๋ ๋ณ๋ก ๊ตฌ๊ฐ์ ๋๋๊ธฐ ์ํด TRUNCATE(number, decimals) ์ฌ์ฉ - ๊ตฌ๊ฐ๋ณ ๊ฐ์ ์ถ๋ ฅ ์ํด COUNT(*) ์ฌ์ฉ SELECT TRUNCATE(PRICE,-4) AS PRICE_GROUP, COUNT(*) AS PRODUCTS FROM PRODUCT GROUP BY TRUNCATE(PRICE,-4) ORDER BY PRICE_.. [programmers] ํ๊ท ์ผ์ผ ๋์ฌ ์๊ธ ๊ตฌํ๊ธฐ ๋ฌธ์ CAR_RENTAL_COMPANY_CAR ํ ์ด๋ธ์์ ์๋์ฐจ ์ข ๋ฅ๊ฐ 'SUV'์ธ ์๋์ฐจ๋ค์ ํ๊ท ์ผ์ผ ๋์ฌ ์๊ธ์ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ํ๊ท ์ผ์ผ ๋์ฌ ์๊ธ์ ์์ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ๊ณ , ์ปฌ๋ผ๋ช ์ AVERAGE_FEE ๋ก ์ง์ ํด์ฃผ์ธ์. ํ์ด - SUV ์ธ ์๋์ฐจ๋ค๋ง ์กฐํ -> WHERE ์ ์กฐ๊ฑด ์ฃผ๊ธฐ - ํ๊ท ์๊ธ์ ๊ตฌํ๊ธฐ ์ํด AVG() ์ฌ์ฉ - ๋ฐ์ฌ๋ฆผํ ๊ฐ ์ถ๋ ฅ ์ํด ROUND(number, decimals) ์ฌ์ฉ SELECT ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEE FROM CAR_RENTAL_COMPANY_CAR WHERE CAR_TYPE = 'SUV' ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์.. ์ด์ 1 2 ๋ค์