SQL

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค level 3] ์กฐ๊ฑด์— ๋งž๋Š” ์‚ฌ์šฉ์ž์™€ ์ด ๊ฑฐ๋ž˜๊ธˆ์•ก ์กฐํšŒํ•˜๊ธฐ

1eehyunji 2023. 7. 10. 02:10

๋ฌธ์ œ ์„ค๋ช…

๋‹ค์Œ์€ ์ค‘๊ณ  ๊ฑฐ๋ž˜ ๊ฒŒ์‹œํŒ ์ •๋ณด๋ฅผ ๋‹ด์€ 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๋งŒ์› ์ด์ƒ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.