본문 바로가기
SQL

[SQL] HackerRank로 시작하는 SQL - 6

by 슈퍼닷 2020. 1. 26.
반응형

2020/01/24 - [SQL] - [SQL] HackerRank로 시작하는 SQL - 5

 

[SQL] HackerRank로 시작하는 SQL - 5

2020/01/24 - [SQL] - [SQL] HackerRank로 시작하는 SQL - 4 [SQL] HackerRank로 시작하는 SQL - 4 2020/01/22 - [SQL] - [SQL] HackerRank로 시작하는 SQL - 3 [SQL] HackerRank로 시작하는 SQL - 3 2020/01/22 -..

jogamja.tistory.com

 

문제 : 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

댓글