

제출 리더보드 토론
N과 P라는 두 개의 열을 포함하는 표 BST가 주어지는데, 여기서 N은 이진 트리의 노드 값을 나타내고 P는 N의 부모이다.
노드의 값으로 정렬된 이진 트리의 노드 유형을 찾기 위한 쿼리를 작성한다. 각 노드에 대해 다음 중 하나를 출력한다:
루트: 노드가 루트 노드인 경우.
리프: 노드가 리프 노드인 경우.
내부: 노드가 루트 노드도 아니고 리프 노드도 아닌 경우.
SELECT *
FROM BST
ORDER BY 2

루트노드 = 뿌리 노드로 부모가 없고 자식만 있는 노드
리프노드 = 잎사귀 노드로 자식은 없고 부모만 있는 노드
즉, N에는 있지만 P에는 없는 숫자가 Leaf
p가 null 인 값은 Root
그 외에는 모두 Inner
SELECT N, CASE
WHEN P IS NULL THEN 'Root'
WHEN N NOT IN (SELECT P FROM BST WHERE P IS NOT NULL) THEN 'Leaf'
ELSE 'Inner' END as node_case
FROM BST
ORDER BY 1
WHEN P IS NULL THEN 'Root' : P가 NULL이면 Root
WHEN N NOT IN (SELECT P FROM BST WHERE P IS NOT NULL) THEN 'Leaf' : N에 포함되지 않는 P의 값을 Leaf로 지정. 단, P가 NULL인 것은 제외
IN 함수에서 컬럼명을 쓸때에는 서브쿼리로 불러와야 된다.
ELSE 'Inner' END as node_case : 나머지는 Inner
엄청 해맸다 ㅠ)ㅠ
기본 틀은 진작에 짰는데 Leaf 값을 구하는 문장을 알맞게 고치느라 애먹음