반응형
2020/01/24 - [SQL] - [SQL] HackerRank로 시작하는 SQL - 5
문제 : BST가 주어졌을때, 부모가 없으면 'Root', 마지막 Node면 'Leaf' 둘다 아니면 'Inner' 다.
N에 대해 오름차순으로 정렬해서 N, NODE_TYPE 으로 출력하시오.
P에 대해서 한번 더 검사를 해야 되기때문에 서브쿼리가 필요하다.
/*
Enter your query here.
*/
SELECT N,CASE WHEN P is NULL THEN 'Root'
WHEN (SELECT COUNT(*) FROM BST WHERE P = B.N ) > 0 THEN 'Inner'
ELSE 'Leaf' END
FROM BST AS B ORDER BY N
이번문제는 초보자인 내겐 너무 어려워서 해답을 보고 했다. 여기서 몇몇 구문을 쓰는법을 알았다.
SELECT ~ FROM TABLE AS B -> SELECT 쿼리를 B라는 구조체? 변수로 볼수있다. (쿼리 내에서)
SELECT 내에 SELECT가 들어갈 수 있는데 이걸 보고 서브쿼리라고 한다.
문제에서 COUNT로 풀었는데 IN을 이용해서 왜 안풀었냐면,
서브 쿼리에서 우리는 SELECT로 일단 검색을 먼저 한다. 검색이 끝나고 자료가 A라는곳에 모여있을때 IN을 새로 쓰게되면 A에 대해 새로 검사를 하므로.. 두번의 탐색을 하게된다. -> 매우 비효율적.
(BST의 NODE가 10만개라고 생각해보자. 10만번 탐색할거 20만번 탐색하는거다.)
서브쿼리 내에서 최소한의 탐색으로 풀기위해 COUNT로 풀어냈다.
음.. 성공
반응형
'SQL' 카테고리의 다른 글
[SQL] HackerRank로 시작하는 SQL - 8 (0) | 2020.01.28 |
---|---|
[SQL] HackerRank로 시작하는 SQL - 7 (0) | 2020.01.26 |
[SQL] HackerRank로 시작하는 SQL - 5 (0) | 2020.01.24 |
[SQL] PRG's SQL DOCS (0) | 2020.01.24 |
[SQL] HackerRank로 시작하는 SQL - 4 (0) | 2020.01.24 |
댓글