What a Beautiful Data!

[Hacker Rank] Binary Tree Nodes 문제 풀이 복습 My sql

by darami

문제       

SELECT N,
    CASE WHEN N NOT IN (SELECT P FROM BST WHERE P IS NOT NULL) THEN 'Leaf'
         WHEN P IS NULL THEN 'Root'
    ELSE 'Inner' END
FROM BST
ORDER BY N
-- 의사 코드 작성 (노드 타입을 작성해라)
-- 1. N이 P에 포함되어있지 않으면 ->Leaf (부모가 아니다)
-- 2. P가 Null 이면 ->ROOT(부모가 없다)
-- 3. 둘다 아니면 ->INNER
-- 문제 : N이 P안에 포함되어있지 않으면에 NULL이 있다. 제거한 테이블: 서브 쿼리

🚀 배운점 🚀

 

- CASE 문 END 로 끝내는거 까먹지 말기 

- CASE WHEN 으로 외워서 CASE WHEN CASE WHEN 으로 쓰는 불상사 없도록 하기

  CASE WHEN  THEN 

          WHEN  THEN 

          ELSE    END 

- Wrong Answer 뜨면 요청 쿼리문 다시 읽어보기 

 

주 3회  1:1 sql 스터디를 한다. 데이터 분석 현업자 분이시라 서로 설명하면서, 많이 배운다!  같이 풀이하면서 배운것

 

Q: 왜 이렇게 쓰면 안될까요? 

CASE WHEN N NOT IN P THEN 'Leaf'

- IN 에는 컬럼이나 테이블을 가지고 올 수 없다.

- 숫자나 문자열을 직접 가져 오는 것만 가능 ex) When N IN ('Paris', 'Seoul') 

- 그래서 IN에 컬럼을 가져 오려면 무조건 아래처럼 SELECT 써서 IN 서브쿼리문 (결과값이 하나 이상일 때) 작성

- 그리고 NULL이 값중에 있으면 계산이 안되니까 WHERE P IS NOT NULL도 써줘야 함

CASE WHEN N NOT IN (SELECT P FROM BST WHERE P IS NOT NULL) THEN 'Leaf'

- 근데 in과 다르게 exists 는 결측치 있어도 계산 됨. exists 에 대해 배움.

- sqld 자격증이 실무에 도움이 많이 된다. exists 도 여기에 나와서 이게 더 성능이 좋다는 것이 생각나서 그렇게 푸셨다.

- 신청한 sqld 공부 열심히 하기! 

블로그의 정보

다람

darami

활동하기