๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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' ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž..

728x90