๐ ๋ณธ ํฌ์คํ ์์ ์ฌ์ฉ๋๋ ํ ์ด๋ธ์ ์๋ฃ์ ์ถ์ฒ๋ HackerRank ์์ ๋ฐํ๋๋ค. ๋ ๋ค์ํ SQL ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ ค๋ฉด
HackerRank ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด ๋ณด์ธ์!
์ด๋ฒ ํฌ์คํ ์์๋ HackerRank์ Contest Leaderboard ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ค๊ณ ํ๋ค. ๋ฌธ์ ์๋ณธ์ ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํด ํ์ธํด๋ณด๊ณ ๋ฌธ์ ์์ ์๊ตฌํ๋ ์ฌํญ์ ํ์ธํด๋ณด์.
The total score of a hacker is the sum of their maximum scores for all of the challenges. Write a query to print thehacker_id,name, and total score of the hackers ordered by the descending score. If more than one hacker achieved the same total score, then sort the result by ascendinghacker_id. Exclude all hackers with a total score of '0' from your result.
(ํ ๋ช hacker์ total score๋, ๊ทธ hacker๊ฐ ํผ ๋ชจ๋ ๋ฌธ์ ๋ค์ ๋ํ score์ ์ต๋๊ฐ์ ํฉ์ ์๋ฏธํ๋ค. ์ด ๋ hacker_id, name, total_score๋ฅผ ์ถ๋ ฅํ๋๋ฐ 1์ฐจ์ ์ธ ์ ๋ ฌ ๊ธฐ์ค์ total_score๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก, 2์ฐจ์ ์ธ ์ ๋ ฌ ๊ธฐ์ค์ hacker_id ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด๋ผ. ๋จ, ๊ฒฐ๊ณผ๊ฐ์์ total score๊ฐ 0์ธ ๋ฐ์ดํฐ๋ค์ ์ ์ธ์์ผ๋ผ.)
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฐ์ฅ ์ค์ํ ํฌ์ธํธ๋ total score๋ฅผ ์ด๋ป๊ฒ ๊ณ์ฐํ ์ ์๋์ง์ด๋ค. total score
์ ๋ํ ์ง๊ด์ ์ธ ์ดํด๋ ๋ฌธ์ ์๋ณธ์ ๋ค์ด๊ฐ์ Sample I/O๋ฅผ ์ดํด๋ณด๋ฉด ๋์์ด ๋ ๊ฒ์ด๋ค.
ํ ๋ช
์ total score
๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
Name | Challenge | Score |
John | 23 | 50 |
John | 23 | 70 |
John | 21 | 80 |
์ ๋ฐ์ดํฐ๋ John์ด 2๊ฐ์ ๋ฌธ์ ์ธ 21๋ฒ, 23๋ฒ์ ๋ํ ์ ์์ด๋ค. ์ด ๋ 21๋ฒ์ 1๋ฒ ํ์๊ธฐ ๋๋ฌธ์ 21๋ฒ์ ๋ํ score
์ต๋๊ฐ์ ๊ทธ๋ฅ 80์ ์ด ๋๋ค. ๋ฐ๋ฉด์ 23๋ฒ์ ๋๋ฒ์ ํ์๋๋ฐ ํ ๋ฒ์ 50์ , ํ ๋ฒ์ 70์ ์ ๋ง์๋ค. ์ด ๋ score
์ ์ต๋๊ฐ์ 70์ ์ด ๋๋ค. ๋ฐ๋ผ์ ์ต์ข
์ ์ธ John์ total score
๋ 70 + 80 ์ธ 150์ ์ด ๋๊ฒ ๋๋ค.
์ด์ total score
๊ฐ๋
์ ์์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด์ ์ด๋ป๊ฒ ํด์ฃผ์ด์ผ ํ ๊น? ๋ฐ๋ก hacker_id
์ challenge_id
๋ ๊ฐ์ ์นผ๋ผ ๊ธฐ์ค์ผ๋ก ๋์์ ๊ทธ๋ฃนํ์ ํด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋์ผ ์ด๋ค hacker_id
์ ๋ํด์ ๊ทธ hacker_id
๊ฐ ํ์ ๋ชจ๋ challenge
์ ๋ํ score
๊ฐ์ด ๋์ฌํ
๋๊น!
์ด์ ์ด๋ฅผ ํ์ฉํ ์ต์ข ์ ์ธ ์ ๋ต SQL ๊ตฌ๋ฌธ์ ์ดํด๋ณด์.
SELECT H.hacker_id, H.name, sub2.total_score
FROM (SELECT sub.hacker_id, SUM(max_score) AS total_score
FROM (SELECT hacker_id, challenge_id, MAX(score) AS max_score
FROM Submissions
GROUP BY hacker_id, challenge_id) sub
GROUP BY sub.hacker_id
HAVING total_score != 0) sub2
INNER JOIN Hackers H ON sub2.hacker_id = H.hacker_id
ORDER BY sub2.total_score DESC, H.hacker_id
๊ฐ์ฅ ๋ด๋ถ์ ์กด์ฌํ๋ ์๋ธ์ฟผ๋ฆฌ๋ก ๊ฐ hacker_id
์ ๋ํด์ ์ด hacker_id
๊ฐ ํ์ challenges
์ค ๊ฐ์ฅ ๋์ score
๊ฐ์ ๋์ถํด๋ด๊ณ ์ด score
๋ค์ ๋ํ total score
๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ค์ ํ ๋ฒ hacker_id
๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ์ ํด์ค๋ค.
๋ง์ง๋ง์ผ๋ก ๊ฐ hacker_id
์ ๋ํ name
์ ๊ฐ์ด ์ถ๋ ฅํด์ฃผ๊ธฐ ์ํด์ INNER JOIN
์ ์ฌ์ฉํ๊ณ ์ ๋ ฌ ๊ธฐ์ค 2๊ฐ์ง๋ฅผ ๋ง์กฑ์์ผ ์ค๋ค.
ํด๋น ๋ฌธ์ ๋ ๋ค๋ฅธ Medium ๋์ด๋์ ๋ฌธ์ ๋ณด๋ค ๋น ๋ฅธ ์๊ฐ ๋ด์ ํ์๋ค. ์๋ง๋ ๋ฌธ์ ์ดํด์ ์์ด์ ์ง๊ด์ ์ธ ์ดํด๊ฐ ์ ๋ ๋๋ถ์ธ ๋ฏ ํ๋ค.
'SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQL] HackerRank - Placements ๋ฌธ์ (0) | 2021.03.10 |
---|---|
[SQL] HackerRank - SQL Project Planning ๋ฌธ์ (0) | 2021.03.04 |
[SQL] MySQL์์๋ ์๋๋ ํ์ด(HackerRank - The PADS ๋ฌธ์ ) (0) | 2021.02.28 |
[SQL] HackerRank - Ollivander's Inventory ๋ฌธ์ ํ์ด (5) | 2021.02.25 |
[SQL] HackerRank - Top Competitors ๋ฌธ์ ํ์ด (2) | 2021.02.22 |