HackerRank(해커랭크) Weather Observation Station 3, Weather Observation Station 19, Placements, Binary Tree Nodes

Kim So-Myoung·2024년 2월 15일
0
post-thumbnail

Weather Observation Station 3

SELECT DISTINCT CITY
FROM STATION
WHERE MOD(ID, 2) = 0
-- WHERE ID % 2 = 0

Weather Observation Station 19

SELECT ROUND(SQRT(POW(MAX(LAT_N) - MIN(LAT_N),2) + POW(MAX(LONG_W) - MIN(LONG_W),2)), 4)
     --   ROUND(SQRT(b-a,2) + POW(d-c,2)), 4)
     -- , MIN(LAT_N) AS a
     -- , MAX(LAT_N) AS b
     -- , MIN(LONG_W) AS c
     -- , MAX(LONG_W) AS d
  FROM STATION

문제 및 수학 공식 문서 꼼꼼히 읽기
문제에 수학 공식이 주어지고 대입만 하면 되는 문제다.
√(b-a)^2+(d-c)^2

Placements

풀이 1

    SELECT S.Name
      FROM Students S
INNER JOIN Friends F
        ON S.ID = F.ID
INNER JOIN Packages PS
        ON S.ID = PS.ID
INNER JOIN Packages PF
        ON F.Friend_ID = PF.ID
     WHERE PF.Salary > PS.Salary
  ORDER BY PF.Salary

풀이 2

    SELECT S.Name
      FROM Friends F
INNER JOIN Students S
        ON F.ID = S.ID
INNER JOIN Packages PS
        ON F.ID = PS.ID
INNER JOIN Packages PF
        ON F.Friend_ID = PF.ID
     WHERE PS.Salary < PF.Salary
  ORDER BY PF.Salary

Binary Tree Nodes

root: 부모 노드가 존재하지 않음
leaf: 자식 노드가 존재하지 않음 = p(부모) 칼럼에 존재하지 않음
inner: 그 외

  1. 서브 쿼리 이용
  SELECT N
       , CASE 
            WHEN P IS NULL THEN 'Root'
            WHEN N IN (SELECT DISTINCT P FROM BST) THEN 'Inner'
            ELSE 'Leaf'
         END AS nodetype           
    FROM BST
ORDER BY N
  1. LEFT OUTER JOIN 이용
SELECT DISTINCT B1.N
     , CASE 
           WHEN B1.P IS NULL THEN 'Root'
           WHEN B2.N IS NULL THEN 'Leaf'
           ELSE 'Inner'
         END AS nodetype
           FROM BST B1
LEFT OUTER JOIN BST B2
             ON B1.N = B2.P
       ORDER BY B1.N;

1번 서브 쿼리를 이용하는 것이 훨씬 깔끔하다.
2번 방식은 LEFT OUTER JOIN에 대한 이해를 돕기 위한 쿼리이며, 이런 방식도 있다는 것만 알아두자.

profile
Full-Stack Engineer

0개의 댓글