[SQL Runday] HackerRank Binary Tree Nodes
이진 트리의 노드의 타입을 출력하기
- 칼럼 N은 노드 이름, 칼럼 P는 노드의 부모 노드 (NULL은 없다는 뜻)
- 자식이 없는 노드는 Leaf, 부모가 없는 노드는 Root, 둘 다 있는 노드는 Inner
Key Points
CASE-WHEN
절 사용하여 조건별로 맞게 출력하기- 새로 배운 것 :
SET
,Group-Concat
- 처음에 접근할 때, sub table로 distinct P만 구해서 IN절로 하면 됐는데 뭐에 쓰였는지
- make list를 검색해서 Group-concat을 알아옴.
SET @list = (select group_concat(distinct P) from BST); select * from bst where n in (@list); -- 혹은 select group_concat(distinct p, seperator ',') from BST where p is not null
- 이러면 string 형태로 '2,4,8' 문자열을 출력할 수 있다.
- 여기서 hash해서 가져오려고 끙끙대다가, 그냥 subtable 만드는 방법으로 해결함..
Errors
when (P is null) then 'Root'
구문을 Inner 다음에 써주면 제대로 작동하지 않고, P가 Null인 N값에도 Inner가 출력된다. 왜지?
- 우선 distinct P 테이블에 노드 15가 들어간다. 부모 노드니깐.- 그리고 N(15)가 Inner 기록된다.
- 그다음 When절에서 P 값이 null이지만, 먼저 Inner로 출력되어서 그냥 Inner로 가져온다?
- 다음에 활용할땐 기억해야 할 점! CASE 작성할 땐 WHEN 순서에 유의하자.
distinct P
가져올때 P가Null
값도 있으므로,where P is not null
조건을 붙여주는 것이 중요하다. Null이 빠져야 제대로 동작한다.
select N,
case
when (P is null) then 'Root'
when(N in (select distinct P from BST
where P is not null)) then 'Inner'
else 'Leaf'
end as case_result
from BST
order by N
Author And Source
이 문제에 관하여([SQL Runday] HackerRank Binary Tree Nodes), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@honeybeat1/SQL-Runday-HackerRank-Binary-Tree-Nodes저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)