๐ข ๋ณธ ํฌ์คํ ์ ํ์ฉ๋๋ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฐ ์๋ฃ ์ถ์ฒ๋
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ
์คํธ ์ฐ์ต,
https://school.programmers.co.kr/learn/challenges?page=1&languages=mysql%2Coracle์์ ๋ฐํ๋๋ค.
โ ๋ฌธ์
๋ฌธ์ ์ค๋ช
๋ค์์ ์๋น์ ์ ๋ณด๋ฅผ ๋ด์ REST_INFOํ ์ด๋ธ๊ณผ ์๋น์ ๋ฆฌ๋ทฐ ์ ๋ณด๋ฅผ ๋ด์ REST_REVIEW ํ ์ด๋ธ์ ๋๋ค. MEMBER_ PROFILE ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ MEMBER_ID, MEMBER_NAME, TLNO, GENDER, DATE _OF_BIRTH๋ ํ์ ID, ํ์ ์ด๋ฆ, ํ์ ์ฐ๋ฝ์ฒ, ์ฑ๋ณ, ์๋ ์์ผ์ ์๋ฏธํฉ๋๋ค.
Column name | Type | Nullable |
MEMBER_ID | VARCHAR(100) | FALSE |
MEMBER_NAME | VARCHAR(50) | FALSE |
TLNO | VARCHAR(50) | TRUE |
GENDER | VARCHAR(1) | TRUE |
DATE_OF_BIRTH | DATE | TRUE |
REST_REVIEW ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ REVIEW_ID, REST_ID, MEMBER_ID, REVIEW_SCORE , REVIEW_TEXT, REVIEW_DATE๋ ๊ฐ๊ฐ ๋ฆฌ๋ทฐ ID, ์๋น ID, ํ์ ID, ์ ์, ๋ฆฌ๋ทฐ ํ ์คํธ, ๋ฆฌ๋ทฐ ์์ฑ์ผ์ ์๋ฏธํฉ๋๋ค.
๋ฌธ์
MEMBER_PROFILE์ REST_REVIEW ํ ์ด๋ธ์์ ๋ฆฌ๋ทฐ๋ฅผ ๊ฐ์ฅ ๋ง์ด ์์ฑํ ํ์์ ๋ฆฌ๋ทฐ๋ค์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ํ์ ์ด๋ฆ, ๋ฆฌ๋ทฐ ํ ์คํธ, ๋ฆฌ๋ทฐ ์์ฑ์ผ์ด ์ถ๋ ฅ๋๋๋ก ์์ฑํด์ฃผ์๊ณ , ๊ฒฐ๊ณผ๋ ๋ฆฌ๋ทฐ ์์ฑ์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์, ๋ฆฌ๋ทฐ ์์ฑ์ผ์ด ๊ฐ๋ค๋ฉด ๋ฆฌ๋ทฐ ํ ์คํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
โ ํ์ด
๋ฌธ์ ์๊ตฌ์ฌํญ
MEMBER_PROFILE์ REST_REVIEW ํ ์ด๋ธ์์* ๋ฆฌ๋ทฐ๋ฅผ ๊ฐ์ฅ ๋ง์ด ์์ฑํ ํ์์ ๋ฆฌ๋ทฐ๋ค์ ์กฐํ
๋ฆฌ๋ทฐ๋ฅผ ๊ฐ์ฅ ๋ง์ด ์์ฑํ ํ์ > ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ → group by, ์ง๊ณํจ์?
์ ๋ฆฌ๋ทฐ๋ฅผ ์กฐํ > ์ง๊ณ๋ ๋ฆฌ๋ทฐ ๊ฐ์๊ฐ ๊ฐ์ฅ ๋ง์ ํ์์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฝ์๋ด๋ ค๋ฉด?
(์ฃผ์ํ ์ ) *MEMBER_PROFILE ํ ์ด๋ธ๊ณผ REST_REVIEW ํ ์ด๋ธ ์กฐ์ธ
>> ์กฐ์ธํ ๋, ๋ฌธ์ ํ์ด์ ํ์ํ ์ด ๋ฐ์ดํฐ๋ '๋ฆฌ๋ทฐ'์ด๋ฏ๋ก REST_REVIEW ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ๋ ํ ์ด๋ธ์ด ์์ฑ๋์ด์ผํ๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์ด RIGHT JOIN ์ฌ์ฉ
>> ๋ฉ์ธ ์ฟผ๋ฆฌ์์๋ ๋ฆฌ๋ทฐ๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ด ํ์์ ์ด๋ฆ์ ์กฐ๊ฑด์ ๋ก ์ถ์ถํด์ค์ผํจ.
๋ฆฌ๋ทฐ ์์ฑ์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์, > ์ ๋ ฌ์กฐ๊ฑด1
๋ฆฌ๋ทฐ ์์ฑ์ผ์ด ๊ฐ๋ค๋ฉด ๋ฆฌ๋ทฐ ํ ์คํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ > ์ ๋ ฌ์กฐ๊ฑด2
SELECT MP.MEMBER_NAME,
RR.REVIEW_TEXT,
DATE_FORMAT(RR.REVIEW_DATE, '%Y-%m-%d') REVIEW_DATE
FROM MEMBER_PROFILE MP
RIGHT JOIN REST_REVIEW RR
ON MP.MEMBER_ID = RR.MEMBER_ID
WHERE MP.MEMBER_NAME = (SELECT MP.MEMBER_NAME
FROM MEMBER_PROFILE MP
RIGHT JOIN REST_REVIEW RR
ON MP.MEMBER_ID = RR.MEMBER_ID
GROUP BY 1
ORDER BY COUNT(*) DESC
LIMIT 1)
ORDER BY 3, 2