์๋ ํ์ธ์, ํ์ด์์ ๋๋ค.
ํ๋ก๊ทธ๋๋จธ์ค SQL [์์ธ์ ์์นํ ์๋น ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ] ๋ฌธ์ ํ์ด์ ๋๋ค.
๋ฌธ์
๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/131118
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฌธ์ ์ค๋ช
๋ค์์ ์๋น์ ์ ๋ณด๋ฅผ ๋ด์ REST_INFO ํ ์ด๋ธ๊ณผ ์๋น์ ๋ฆฌ๋ทฐ ์ ๋ณด๋ฅผ ๋ด์ REST_REVIEW ํ ์ด๋ธ์ ๋๋ค. REST_INFO ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ REST_ID, REST_NAME, FOOD_TYPE, VIEWS, FAVORITES, PARKING_LOT, ADDRESS, TEL์ ์๋น ID, ์๋น ์ด๋ฆ, ์์ ์ข ๋ฅ, ์กฐํ์, ์ฆ๊ฒจ์ฐพ๊ธฐ์, ์ฃผ์ฐจ์ฅ ์ ๋ฌด, ์ฃผ์, ์ ํ๋ฒํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
Column name | Type | Nullable |
REST_ID | VARCHAR(5) | FALSE |
REST_NAME | VARCHAR(50) | FALSE |
FOOD_TYPE | VARCHAR(20) | TRUE |
VIEWS | NUMBER | TRUE |
FAVORITES | NUMBER | TRUE |
PARKING_LOT | VARCHAR(1) | TRUE |
ADDRESS | VARCHAR(100) | TRUE |
TEL | VARCHAR(100) | TRUE |
REST_REVIEW ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ REVIEW_ID, REST_ID, MEMBER_ID, REVIEW_SCORE, REVIEW_TEXT,REVIEW_DATE๋ ๊ฐ๊ฐ ๋ฆฌ๋ทฐ ID, ์๋น ID, ํ์ ID, ์ ์, ๋ฆฌ๋ทฐ ํ ์คํธ, ๋ฆฌ๋ทฐ ์์ฑ์ผ์ ์๋ฏธํฉ๋๋ค.
Column name | Type | Nullable |
REVIEW_ID | VARCHAR(10) | FALSE |
REST_ID | VARCHAR(10) | TRUE |
MEMBER_ID | VARCHAR(100) | TRUE |
REVIEW_SOCRE | NUMBER | TRUE |
REVIEW_TEXT | VARCHAR(1000) | TRUE |
REVIEW_DATE | DATE | TRUE |
๋ฌธ์
REST_INFO์ REST_REVIEW ํ
์ด๋ธ์์ ์์ธ์ ์์นํ ์๋น๋ค์ ์๋น ID, ์๋น ์ด๋ฆ, ์์ ์ข
๋ฅ, ์ฆ๊ฒจ์ฐพ๊ธฐ์, ์ฃผ์, ๋ฆฌ๋ทฐ ํ๊ท ์ ์๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๋ฆฌ๋ทฐ ํ๊ท ์ ์๋ ์์์ ์ธ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ ํด์ฃผ์๊ณ ๊ฒฐ๊ณผ๋ ํ๊ท ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ , ํ๊ท ์ ์๊ฐ ๊ฐ๋ค๋ฉด ์ฆ๊ฒจ์ฐพ๊ธฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
์ฝ๋
SELECT A.REST_ID
, A.REST_NAME
, A.FOOD_TYPE
, A.FAVORITES
, A.ADDRESS
, ROUND(AVG(B.REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO A
JOIN REST_REVIEW B
ON A.REST_ID = B.REST_ID
GROUP BY B.REST_ID
HAVING A.ADDRESS LIKE '์์ธ%'
ORDER BY ROUND(AVG(B.REVIEW_SCORE), 3) DESC, A.FAVORITES DESC
ํ์ด
- ROUND(์ค์, ํ์๋ฅผ ์ํ๋ ์๋ฆฟ์) : ํด๋น ๋ฌธ์ ์์๋ ์ ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ ํ๋ผ๊ณ ํ๊ธฐ ๋๋ฌธ์ 2๋ฅผ ์ ๋๋ค
- AVG : ํ๊ท ์ ๋ํ๋ด๊ณ ์ถ์ ๋ ์ฌ์ฉ
- AS : ์นผ๋ผ๋ช ์ ์ง์ ํ๋ ๊ฒ์ผ๋ก, ๋ง์ฝ AS SCORE์ ํ์ํ์ง ์์๋ค๋ฉด, ์์์ด ๊ทธ๋๋ก ์นผ๋ผ๋ช ์ผ๋ก ๋ค์ด๊ฐ๋ค.
- JOIN ON : ๊ณตํต ์ปฌ๋ผ์ธ REST_ID๋ฅผ ๊ธฐ์ค์ผ๋ก JOIN์ ๊ฑฐ์๋ค.
- GROUP BY : ๊ทธ๋ฃน๋ณ๋ก ๋ฌถ์ด์ ํ๊ธฐํ๊ณ ์ถ๋ค๋ฉด GROUP BY๋ฅผ ์ด์ฉํ๋ค.
- LIKE : %๊ธฐํธ๋ฅผ ์ด์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ
์์ ๋์์ด ๋์ จ๊ธธ ๋ฐ๋ผ๋ฉฐ, ์ข์์๋ ๋๊ธ์ ํฐ ํ์ด ๋ฉ๋๋ค:)