인프런- 데이터분석을 위한 중급 SQL 문제풀이: 섹션5 / 3, 4번(틀림)

르네·2023년 9월 23일
0

SQL

목록 보기
18/63

문제

https://www.hackerrank.com/challenges/placements/problem?isFullScreen=true

풀이

  • 나의 풀이
SELECT S.name
FROM Packages P
     INNER JOIN Students S ON P.ID = S.ID
     INNER JOIN Friends F ON S.ID = F.ID
     INNER JOIN Friends FR ON F.ID = FR.Friend_ID
     INNER JOIN Packages PA ON FR.ID = PA.ID
WHERE P.salary < PA.salary
ORDER BY PA.salary

: 다 풀어서 결과도 나왔으나 틀린 답이라고 뜬다.

  • 선생님 풀이
SELECT S.name
FROM Friends F
     INNER JOIN Students S ON F.ID = S.ID -- 아이디에 본인 이름 붙이기
     INNER JOIN Packages P1 ON P1.ID = F.ID -- 본인 샐러리
     INNER JOIN Packages P2 ON P2.ID = F.Friend_ID -- 친구 샐러리
WHERE P1.salary < P2.salary
ORDER BY P2.salary

배운점

  • 문제를 보고, 먼저 풀이를 위해 테이블 형식으로 중요한 열을 쭉 테이블로 작성해보는 연습을 하자! 그렇게 하면 더 간단하게 풀 수 있는 방법을 더 쉽게 찾을 수 있다.

  • 선생님은 이 방식대로 해서 INNER JOIN 세 번만 해서 정답을 도출했다.

  • 동일한 테이블을 여러번 INNER JOIN할 수 있다. 다만 'AS 별칭'을 다르게 표현하면 된다.


문제

https://www.hackerrank.com/challenges/binary-search-tree-1/problem?isFullScreen=true

풀이

  • 나의 풀이
    : CASE문을 쓰면 되겠다고 생각했지만, N과 P를 어떻게 구현해야 할지 모르겠어서 손을 못댔다.

  • 선생님 풀이

SELECT DISTINCT BST.N
     , CASE 
            WHEN BST.P IS NULL THEN 'Root'
            WHEN BST2.N IS NULL THEN 'Leaf'
            ELSE 'Inner'
       END
FROM BST
     LEFT JOIN BST AS BST2 ON BST.N = BST2.P
ORDER BY BST.N

배운점

  • LEFT JOIN을 써서 'N열에는 있는데 P열에는 없는(NULL인)' Leaf 조건을 구현해주었다.
  • Root도 아니고, Leaf도 아닐 때는 'ELSE 'Inner'' 이렇게 구현해주면 된다.
  • N과 P를 구현하고 싶으면, '테이블명, 열명'을 작성하면 된다.
    ex. BST.N
profile
데이터분석 공부로그

0개의 댓글