1) ๋ฌธ์ ์ค๋ช
- ๋ค์์ ์๋น์ ์ ๋ณด๋ฅผ ๋ด์ 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_SCORE | NUMBER | TRUE |
REVIEW_TEXT | VARCHAR(1000) | TRUE |
REVIEW_DATE | DATE | TRUE |
2) ๋ฌธ์
- REST_INFO์ REST_REVIEW ํ ์ด๋ธ์์ ์์ธ์ ์์นํ ์๋น๋ค์ ์๋น ID, ์๋น ์ด๋ฆ, ์์ ์ข ๋ฅ, ์ฆ๊ฒจ์ฐพ๊ธฐ์, ์ฃผ์, ๋ฆฌ๋ทฐ ํ๊ท ์ ์๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
- ์ด๋ ๋ฆฌ๋ทฐ ํ๊ท ์ ์๋ ์์์ ์ธ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ ํด์ฃผ์๊ณ ๊ฒฐ๊ณผ๋ ํ๊ท ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ , ํ๊ท ์ ์๊ฐ ๊ฐ๋ค๋ฉด ์ฆ๊ฒจ์ฐพ๊ธฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
3) ์์
- REST_INFO ํ ์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๊ณ
REST_ID | REST_NAME | FOOD_TYPE | VIEWS | FAVORITES | PARKING_LOT | ADDRESS | TEL |
00028 | ๋์ฐ๋ถ๋์ฐ๊ฐ | ํ์ | 52310 | 10 | N | ๊ฒฝ๊ธฐ๋ ์ฉ์ธ์ ์ฒ์ธ๊ตฌ ๋จ์ฌ์ ์ฒ์ธ์ฑ๋ก 309 | 031-235-1235 |
00039 | ๊ด์ฃผ์๋น | ํ์ | 23001 | 20 | N | ๊ฒฝ๊ธฐ๋ ๋ถ์ฒ์ ์ฐ์ ๋ก8๋ฒ๊ธธ 60 | 031-235-6423 |
00035 | ์ผ์ด์๋น | ์ผ์ | 532123 | 80 | N | ์์ธํน๋ณ์ ๊ฐ์๊ตฌ ๊ฐ๋ก๊ณต์๋ก76๊ฐ๊ธธ | 02-135-1266 |
- REST_REVIEW ํ ์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ์ ๋
REVIEW_ID | REST_ID | MEMBER_ID | REVIEW_SCORE | REVIEW_TEXT |
R000000065 | 00028 | soobin97@naver.com | 5 | ๋ถ์ฐ ๊ตญ๋ฌผ์์ ์ค๋ธ์ค๋ธ ๋ง์ด๋๊ณ ๊น๋ |
R000000066 | 00039 | yelin1130@gmail.com | 5 | ๊น์น์ฐ๊ฐ ์ต๊ณฑ๋๋ค. |
R000000067 | 00028 | yelin1130@gmail.com | 5 | ํ์ด ๋ง์์ ์ข์์ |
R000000068 | 00035 | ksyi0316@gmail.com | 5 | ์์ฑํ๊ฐ ๋๋ด์ค๋๋ค. |
R000000069 | 00035 | yoonsy95@naver.com | 4 |
- SQL์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋์ด์ผ ํฉ๋๋ค.
REST_ID | REST_NAME | FOOD_TYPE | FAVORITES | ADDRESS SCORE |
00035 | ์ผ์ด์๋น | ์ผ์ | 80 | ์์ธํน๋ณ์ ๊ฐ์๊ตฌ ๊ฐ๋ก๊ณต์๋ก76๊ฐ๊ธธ |
4) ํ์ด
[๊ฐ๊ฒฐํ ๋ฒ์ ]
SELECT i.REST_ID, i.REST_NAME, i.FOOD_TYPE, i.FAVORITES, i.ADDRESS, ROUND(AVG(r.REVIEW_SCORE), 2) AS "SCORE"
FROM REST_INFO i
INNER JOIN REST_REVIEW r
ON i.REST_ID = r.REST_ID
WHERE i.ADDRESS LIKE '์์ธ%'
GROUP BY REST_ID
ORDER BY 6 DESC, 4 DESC;
[์๊ฒฉํ ๋ฒ์ ]
SELECT i.REST_ID, i.REST_NAME, i.FOOD_TYPE, i.FAVORITES, i.ADDRESS, ROUND(AVG(r.REVIEW_SCORE), 2) AS "SCORE"
FROM REST_INFO i
INNER JOIN REST_REVIEW r
ON i.REST_ID = r.REST_ID
WHERE i.ADDRESS LIKE '์์ธ%'
GROUP BY i.REST_ID, i.REST_NAME, i.FOOD_TYPE, i.FAVORITES, i.ADDRESS
ORDER BY ROUND(AVG(r.REVIEW_SCORE), 2) DESC, FAVORITES DESC;
- MySQL์ "Only_FULL_GROUP_BY" ๋ชจ๋๋ GROUP BY๋ก ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ๋, ๋ชจ๋ SELECT๋ฌธ์ ์ง์ ๋ ์ปฌ๋ผ์ด๋ ํํ์์ด GROUP BY ๋ชฉ๋ก์ ํฌํจ๋๊ฑฐ๋ ์ง๊ณ ํจ์๊ฐ ์ ์ฉ๋์ด์ผ ํจ์ ๊ฐ์ ํฉ๋๋ค.
- ๋ฐ๋ผ์, MySQL์ "ONLY_FULL_GROUP_BY" ๋ชจ๋์์๋ ํ ์ด๋ธ์ ์๋ ๊ฐ์ด ๋ชจ๋ ๋์ผํ ๊ฒฝ์ฐ์๋ ๋ช ์๋ GROUP BY ๋ชฉ๋ก์ ์๋ ์ปฌ๋ผ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค.
- ๋ค๋ง, ํ๋ก๊ทธ๋๋จธ์ค์์๋ ํด๋น ONLY_FULL_GROUP_BY ๋ชจ๋๋ฅผ ์ ์ฉํ์ง ์์์ผ๋ฏ๋ก GROUP BY์ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ๋ REVIEW_SCORE๋ฅผ ์ ์ธํ SELECT๋ฌธ์ ์ง์ ํ ๋ชจ๋ ์ปฌ๋ผ์ ์ ์ด์ฃผ์ง ์์๋ ๋์ํฉ๋๋ค!
[Reference]
๋ฐ์ํ