본문 바로가기

열정가득한 개발자의 이야기/hacker Rank SQL 문제

Hacker Rank (The Report)

오늘 처음으로 알게 된 sql문이 있어서 급급하게 포스팅해 봅니다.

일단 문제를 소개해 드릴게요!

 

 

문제 요약 :

두 개의 테이블이 있고, MARKS를 기준으로 GRADE를 가져오는 것입니다.

그러나 성적이 낮은 아이들이 자신의 이름이 나오면 부끄러워할 수도 있으니 7등급 미만이 아이들의 이름은 NULL처리를 해줘야 합니다. 

정렬은 MARKS가 가장 높은 아이가 나오고, GRADE가 동일하면 이름 순으로 나와야 합니다. 

 

 

 

 

 

문제 풀이 : 일단 저는 해당 문제를 JOIN으로 풀려고 했습니다. 

근데, 이전의 저는 JOIN문에는 꼭 동일한 아이디가 있어야 한다고 생각했어요. 예로 1번 테이블의 ID가 2번 테이블의 ID와 동일해서 ON으로 묶어줘야지만이 JOIN문을 쓸 수 있다고 생각했습니다. 

근데.. 이건 완전 경기도 오산이었어요..

 

그래서  두 가지 방식으로 풀어봤습니다. 

ON에 조건절을 줘서 아래와 같이 풀어봤습니다. 

 

MYSQL JOIN ON의 조건문

 

그러다가 비등가 JOIN문이라는 것을 알게 되었고, 엘리스의 동굴처럼 계속 꼬리를 물고 구글링 하다가 JOIN절 대신 WHERE 절을 써서 묶어 줄 수 있다는 것을 또 알게 되었습니다..

오늘 정말 많은 걸 배우네요 행복합니다. 

 

 

아 그리고 ORDER BY에서 * 1을 해준 이유는 * 1을 해주지 않으면 순서가 1,2,3,10 이런 식으로 나와요.

그래서 * 1을 해줘서 이러한 현상을 방지해 주면 됩니다. 

 

WHERE 절을 쓴 게 JOIN문 보다 더 간결하지 않나요.

정말 행복하네요.

 

해커랭크 문제 정말 좋은 것 같아요. 프로그래머스에서 보지 못했던 유형들이 나와서 다양한 구문들을 배울 수 있어서 좋습니다. 그리고 생각지도 못한 문제들이 나와서,, 아예 문제 해결 방법을 생각하지도 못한 적도 있지만요.. 근데 풀이는 또 쉬워... 후... 

 

빨리 레벨 업해서 더 좋은, 합리적인 개발자가 되고 싶습니다.