728x90
📚문제
📝풀이
SELECT S.Name
, G.Grade
, S.Marks
FROM STUDENTS S
INNER JOIN Grades G ON S.Marks >= G.Min_mark AND S.Marks <= G.Max_mark
WHERE G.Grade >= 8
ORDER BY G.Grade DESC, S.NAME;
SELECT NULL
, G.Grade
, S.Marks
FROM STUDENTS S
INNER JOIN Grades G ON S.Marks >= G.Min_mark AND S.Marks <= G.Max_mark
WHERE G.Grade < 8
ORDER BY G.Grade DESC, S.Marks;
지금까지 배웠었던 내용으로는 풀지 못할 것 같아서 Leaderboard의 MySQL로 된 풀이를 참고했다
다행히 그렇게 어려운 함수나 내용은 아닌 것 같고
2가지가 포인트인 것 같다
1. 두 테이블을 JOIN할 때 Key
Student 테이블에는 Marks로 되어있고
Grades 테이블에는 Min_mark와 Max_mark가 구간처럼 되어있는데
그럼 Key를 어떻게 설정해 줘야되는거지? 라는 의문이 들었다
답은 AND 조건을 사용해서 S.Marks가 범위에 속할 때의 Marks값과 Grade값을 표시한다
2. 두 쿼리를 이어서 작성
두 쿼리를 합치려면 당연히 UNION을 써야한다고 생각했는데
생각해보니까 위 쿼리와 아래 쿼리는
첫 열이 각각 달라서 UNION은 할 수 없다
그래서 풀이를 보니 그냥 두 쿼리를 따로 써줬다...
이렇게 작성하면 결과가 그냥 순차적으로 나열되서 정답 처리가 되나보다
다른 풀이는 없는지 나중에 데이터리안 질문채널에 질문해봐야겠다
+ 몇 달만에 다시 풀어봤는데
CASE문을 사용하니 간단히 풀렸다 👏
SELECT CASE
WHEN g.Grade >= 8 THEN s.Name
ELSE NULL
END AS Name
, g.Grade
, s.Marks
FROM Students s
JOIN Grades g ON s.Marks >= g.Min_Mark AND s.Marks <= g.Max_mark
ORDER BY g.Grade DESC, s.Name
728x90
'SQL > HackerRank (SQL문풀)' 카테고리의 다른 글
Advanced Select / Occupations / MySQL (0) | 2023.11.21 |
---|---|
Hackerrank / Advanced Join / Symmetric Pairs / MySQL (0) | 2023.10.20 |
Hackerrank / Advanced Join / Placements / MySQL (0) | 2023.10.19 |
Hackerrank / Advanced Select / The PADS / MySQL (0) | 2023.10.19 |
HackerRank / Basic Select / Weather Observation Station 5 / MySQL (1) | 2023.10.04 |