[ํ๋ก๊ทธ๋๋จธ์ค level 3] ์กฐ๊ฑด์ ๋ง๋ ์ฌ์ฉ์์ ์ด ๊ฑฐ๋๊ธ์ก ์กฐํํ๊ธฐ
๋ฌธ์ ์ค๋ช
๋ค์์ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์ํ ์ ๋ณด๋ฅผ ๋ด์ USED_GOODS_BOARD ํ ์ด๋ธ๊ณผ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์ํ ์ฒจ๋ถํ์ผ ์ ๋ณด๋ฅผ ๋ด์ USED_GOODS_USER ํ ์ด๋ธ์ ๋๋ค. USED_GOODS_BOARD ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS๋ ๊ฒ์๊ธ ID, ์์ฑ์ ID, ๊ฒ์๊ธ ์ ๋ชฉ, ๊ฒ์๊ธ ๋ด์ฉ, ๊ฐ๊ฒฉ, ์์ฑ์ผ, ๊ฑฐ๋์ํ, ์กฐํ์๋ฅผ ์๋ฏธํฉ๋๋ค.
BOARD_ID | VARCHAR(5) | FALSE |
WRITER_ID | VARCHAR(50) | FALSE |
TITLE | VARCHAR(100) | FALSE |
CONTENTS | VARCHAR(1000) | FALSE |
PRICE | NUMBER | FALSE |
CREATED_DATE | DATE | FALSE |
STATUS | VARCHAR(10) | FALSE |
VIEWS | NUMBER | FALSE |
USED_GOODS_USER ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ USER_ID, NICKNAME, CITY, STREET_ADDRESS1, STREET_ADDRESS2, TLNO๋ ๊ฐ๊ฐ ํ์ ID, ๋๋ค์, ์, ๋๋ก๋ช ์ฃผ์, ์์ธ ์ฃผ์, ์ ํ๋ฒํธ๋ฅผ ๋ฅผ ์๋ฏธํฉ๋๋ค.
Column nameTypeNullable
USER_ID | VARCHAR(50) | FALSE |
NICKANME | VARCHAR(100) | FALSE |
CITY | VARCHAR(100) | FALSE |
STREET_ADDRESS1 | VARCHAR(100) | FALSE |
STREET_ADDRESS2 | VARCHAR(100) | TRUE |
TLNO | VARCHAR(20) | FALSE |
๋ฌธ์
USED_GOODS_BOARD์ USED_GOODS_USER ํ ์ด๋ธ์์ ์๋ฃ๋ ์ค๊ณ ๊ฑฐ๋์ ์ด๊ธ์ก์ด 70๋ง ์ ์ด์์ธ ์ฌ๋์ ํ์ ID, ๋๋ค์, ์ด๊ฑฐ๋๊ธ์ก์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ์ด๊ฑฐ๋๊ธ์ก์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
๋ฌธ์ ํ์ด
SELECT USER_ID, NICKNAME, SUM(PRICE) AS TOTAL_SALES FROM USED_GOODS_BOARD
JOIN USED_GOODS_USER ON USED_GOODS_BOARD.WRITER_ID=USED_GOODS_USER.USER_ID
WHERE STATUS='DONE'
GROUP BY WRITER_ID
HAVING SUM(PRICE)>=700000
ORDER BY TOTAL_SALES;
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ JOIN, WHERE, GROUP BY ๋ฑ์ ๋ฌธ๋ฒ์ ์์ฑ ์์๊ฐ ํท๊ฐ๋ ธ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก FROM, JOIN > WHERE > GROUP BY > HAVING > ORDER BY ์์ผ๋ก ์์ฑํด์ผ ํ๋ค.
์ด์ ๋ SQL์ ์คํ ์์์ ๊ด๋ จ์๋ค.
๋จผ์ , SQL๋ฌธ์ FROM์ ๊ฐ์ฅ ๋จผ์ ์ํํ๋ฉด์ ์กฐํํ ํ ์ด๋ธ์ ํ์ธํ๋ค.
์ฌ๊ธฐ์ JOIN์ ์ํํ ์์๋ FROM ๋ค์์ผ๋ก ๋ฐ๋ก JOIN์ ์ํํด์ผ ํ๋๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก JOIN์ด ์ํ๋ ํ ์ด๋ธ์ ์กฐํํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ WHERE์ ํตํด์ ์ฐ๋ฆฌ๊ฐ ์กฐํํด์ผ ํ๋ ํ ์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง๊ฒ ์ถ์ถ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค.
๋ค์์ผ๋ก, GROUP BY๋ฅผ ํตํด์ ๊ณตํต๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ , HAVING์ ํตํด์ ๊ณตํต๋ ๋ฐ์ดํฐ ์ค ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค.
๊ทธ๋ฆฌ๊ณ SELECT๋ฅผ ํตํด์ ์ถ์ถ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ , ORDER BY๋ฅผ ํตํด์ ์ถ์ถ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๋ค.
๋๋ฌธ์, ์ ์์๋๋ก SQL ๊ตฌ๋ฌธ์ ์์ฑํด์ผ ํ๋ค.
์ด ๋ฌธ์ ๋ ์ฐ์ USED_GOODS_BOARD ํ ์ด๋ธ์ WRITER_ID์ USED_GOODS_USER ํ ์ด๋ธ์ USER_ID๋ฅผ ๊ธฐ์ค์ผ๋ก JOINํ๊ณ , JOIN๋ ํ ์ด๋ธ์์ ํ๋งค๋ ์ํ('DONE') ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค.
๋ค์์ผ๋ก GROUP BY๋ฅผ ํตํด์ ์ถ์ถ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ WRITER_ID๋ฅผ ๊ฐ์ง๋ ๋ฐ์ดํฐ๋ผ๋ฆฌ ๋ฌถ์ด์ฃผ๊ณ ,
๋ฌถ์ด์ค ๋ฐ์ดํฐ์ ์ด PRICE์ ํฉ์ด 70๋ง์ ์ด์์ธ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค.