Growth ๐ŸŒณ/Practice ๐Ÿ’ป

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ทธ๋ฃน๋ณ„ ์กฐ๊ฑด์— ๋งž๋Š” ์‹๋‹น ๋ชฉ๋ก ์ถœ๋ ฅํ•˜๊ธฐ

์ธ” 2022. 12. 31. 17:55

๐Ÿ“ข ๋ณธ ํฌ์ŠคํŒ…์— ํ™œ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ๋ฌธ์ œ ๋ฐ ์ž๋ฃŒ ์ถœ์ฒ˜๋Š”

       ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต,   
       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