๐ ๋ณธ ํฌ์คํ ์์ ์ฌ์ฉ๋๋ ํ ์ด๋ธ์ ์๋ฃ์ ์ถ์ฒ๋ HackerRank ์์ ๋ฐํ๋๋ค. ๋ ๋ค์ํ SQL ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ ค๋ฉด
HackerRank ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด ๋ณด์ธ์!
์ด๋ฒ ํฌ์คํ ์์๋ ํด์ปค๋ญํฌ ์ฌ์ดํธ์ Top Competitors ๋ฌธ์ ๋ฅผ ํ์ดํด๋ณด์. ๋ฌธ์ ์๋ณธ์ ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํด ์ฝ์ด๋ณด์.
๋ฌธ์ ์์ ์ฃผ์ด์ง ํ ์ด๋ธ๋ค์ ๋ฌธ์ ์๋ณธ์ ์ดํด๋ณด๊ณ ์ฌ๊ธฐ์์๋ ์ด๋ค ์ถ๋ ฅ์ ๋ด์ฉ์ ์๊ตฌํ๋์ง์ ๋ํด์ ์ดํดํด๋ณด์.
Julia just finished conducting a coding contest, and she needs your help assembling the leaderboard! Write a query to print the respectivehacker_idandnameof hackers who achieved full scores formore than onechallenge. Order your output in descending order by the total number of challenges in which the hacker earned a full score. If more than one hacker received full scores in same number of challenges, then sort them by ascendinghacker_id.
(์ค๋ฆฌ์๋ ์ฝ๋ฉ ๋ํ๋ฅผ ๋ง์ณค๊ณ ์ฐธ๊ฐ์๋ค์ ์ ์ ๋ฆฌ๋๋ณด๋๋ฅผ ๋ง๋๋ ค๊ณ ํ๋ค. 2๊ฐ ์ด์์ Challenge(๋ฌธ์ )์์ Full score(๋ง์ )๋ฅผ ๋ฐ์ Hacker(์ฐธ๊ฐ์)๋ค์ ์ด๋ฆ๊ณผ hacker_id๋ฅผ ์ถ๋ ฅํด๋ผ. ์ด ๋ ๊ฒฐ๊ณผ ํ๋ฉด์ Full score๋ฅผ ๋ฐ์ Challenge์ ๊ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๊ณ ๋ง์ฝ Full score๋ฅผ ๋ฐ์ Challenge ๊ฐ์๊ฐ ๋์ผํ๋ค๋ฉด hacker_id ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด๋ผ.)
์ด์ ์ฐ๋ฆฌ๊ฐ ํด์ผ ํ๋ ์ผ์ ๋ค์๊ณผ ๊ฐ๋ค.
- Full score(๋ง์ )์ ๋ฐ์ ์ฑ๋ฆฐ์ง๊ฐ 2๊ฐ ์ด์์ธ ์ฐธ๊ฐ์๋ค์ ์ฐพ์.
- ์ด ๋ ๋ง์ ์ด๋, Submissions ํ ์ด๋ธ์ score ๊ฐ๊ณผ Difficulty ํ ์ด๋ธ์ score ๊ฐ๊ณผ ์ผ์นํ๋ ๊ฒ์ ์๋ฏธ
- 2๊ฐ์ง ์ ๋ ฌ ๊ธฐ์ค์ ๋ง์กฑํด์ ์ถ๋ ฅ์ํค๊ธฐ
์ฐ๋ฆฌ๋ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ง๋ ํฌ์คํ ์์ ํ๋ ๊ฒ์ฒ๋ผ ์ฐ์์ ์ธ JOIN ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ ํด๊ฒฐํ ๊ฒ์ด๋ค. ๋จผ์ ์ ๋ต SQL ๊ตฌ๋ฌธ์ ์ดํด๋ณด์.
SELECT H.hacker_id, H.name
FROM Submissions S
INNER JOIN Challenges C ON S.challenge_id = C.challenge_id
INNER JOIN Difficulty D ON C.difficulty_level = D.difficulty_level
INNER JOIN Hackers H ON S.hacker_id = H.hacker_id
WHERE S.score = D.score AND C.difficulty_level = D.difficulty_level
GROUP BY H.hacker_id, H.name
HAVING COUNT(H.hacker_id) > 1
ORDER BY COUNT(H.hacker_id) DESC, H.hacker_id
์ด์ INNER JOIN ๊ตฌ๋ฌธ ํ๋๋ฅผ ์์๋ก ์ดํด๋ณด์. ์ฐ์ 3๋ฒ์งธ ๋ผ์ธ์ Submissions
ํ
์ด๋ธ๊ณผ Challenges
ํ
์ด๋ธ์ INNER JOIN ํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์์ง๋ค.(ํ
์ด๋ธ ๊ฐ๋ค์ ์์๋ ํ์๊ฐ ์์๋ก ๋ง๋ ๊ฒ์์ ์ฐธ๊ณ ํ์)
submission_id | hacker_id (๋ฌธ์ ํ์ดํhacker_id) |
challenge_id | score(๋ง์ ์ ์) | challenge_id | hacker_id (๋ฌธ์ ๋ฅผ ๋ง๋ hacker_id) |
difficulty_level |
1๋ฒ | ์ฒ ์ | 3๋ฒ ๋ฌธ์ | 60์ | 3๋ฒ ๋ฌธ์ | ๋ค์ | 5 |
2๋ฒ | ๊ธฐ์ | 9๋ฒ ๋ฌธ์ | 100์ | 9๋ฒ ๋ฌธ์ | ์ ๋ฆฌ | 7 |
3๋ฒ | ๋ค์ | 12๋ฒ ๋ฌธ์ | 30์ | 12๋ฒ ๋ฌธ์ | ๊ธฐ์ | 3 |
์ ์กฐ์ธ์ํจ ํ
์ด๋ธ์ ๋ณด์์ ๋, ํฌ์ธํธ ๋ถ๋ถ์ 2๊ฐ์ hacker_id
๊ฐ์ด ์๋๋ฐ ๊ฐ์ ์๋ฏธํ๋ ๋ฐ๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ด๋ค. ์ฆ, challenge_id
๊ฐ์ ๋์ผํ์ง๋ง ๊ทธ challenge๋ฅผ ๋๊ฐ ๋๊ณ ๋๊ฐ ํ์ดํ๋์ง๋ ๋ค๋ฅด๋ค๋ ๊ฒ์ด๋ค! ์ ํ
์ด๋ธ์ ๋ณด๋ฉด ๋ค์์ด๋ 3๋ฒ ๋ฌธ์ ๋ฅผ ๋ง๋ค๊ธฐ๋ ํ์ง๋ง 12๋ฒ ๋ฌธ์ ๋ฅผ ํ๊ธฐ๋ ํ์์ ์ ์ ์๋ค.
์ด์ ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฐ์์ ์ผ๋ก Difficulty
ํ
์ด๋ธ๊ณผ Hackers
ํ
์ด๋ธ์ ์ฐ์์ ์ผ๋ก INNER JOIN ์์ผ์ฃผ์.
์ด์ WHERE
๊ตฌ๋ฌธ์ ์๋ ์จ์๋ค์ํผ Full score๋ฅผ ๋ง์ ์ฐธ๊ฐ์๋ค๋ง ํํฐ๋ง์์ผ์ฃผ์ด์ผ ํ๋๋ฐ, ์กฐ๊ฑด์ 2๊ฐ๋ก ๋ฌ์์ค๋ค. ์ฆ, ๋ฌธ์ ์ ๋ง์ ๊ธฐ์ค ์ ์์ ์ฐธ๊ฐ์๊ฐ ํ๊ณ ๋ ์ ์๊ฐ ๋์ผํ๋ฉด์ ๋ฌธ์ ์ ๋์ด๋๋ ๋์ผํด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ Full score๋ฅผ ๋ง์ ๋ฌธ์ ๊ฐ 2๊ฐ ์ด์์ธ ์ฌ๋๋ค์ ์์๋ณด๊ธฐ ์ํด hacker_id
, name
์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ์ ์์ผ์ฃผ๊ณ hakcer_id
๋ฅผ COUNT
ํด์ค๋ค. ์ด ๋ COUNT(hacker_id)
ํ ๊ฐ์ด 1 ๋ณด๋ค ํด ๋ ๋ฐ๋ก Full score๋ฅผ ๋ง์ ๋ฌธ์ ๊ฐ 2๊ฐ ์ด์์ธ hacker_id
, name
๋ง ๋จ๊ฒ ๋๋ค.
๋ง์ง๋ง์ผ๋ก COUNT(hacker_id)
ํด์ค ๊ฐ์ ์ต์ฐ์ ์ ๋ ฌ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํด์ฃผ๊ณ ๋์ผํ COUNT(hacker_id)
๊ฐ์ ๊ฐ์ง ๋๋ hacker_id
๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ฃผ๋๋ก ํ์.