이 SQL 솔루션은 천재입니다!!🤩

나는 최근에 Leetcode에서 SQL 문제를 해결하기 시작했고 매일 적어도 하나의 문제를 접하게 되는데 그 해결책은 정말 천재적이라고 생각합니다.

오늘 제가 발견한 그러한 문제 중 하나는 아래에서 논의할 것입니다.

데이터베이스(608. 트리 노드)



문제 설명
트리에서 각 노드의 유형을 찾아야 합니다. 루트, 내부 또는 리프 노드인지 여부.


Input: 
Tree table:
+----+------+
| id | p_id |
+----+------+
| 1  | null |
| 2  | 1    |
| 3  | 1    |
| 4  | 2    |
| 5  | 2    |
+----+------+
Output: 
+----+-------+
| id | type  |
+----+-------+
| 1  | Root  |
| 2  | Inner |
| 3  | Leaf  |
| 4  | Leaf  |
| 5  | Leaf  |
+----+-------+

Checkout the description thoroughly from the link above and try get an idea of solving it before checking out below approaches

1. 나의 접근법


CASE를 사용하여 해결했습니다.
핵심적인 세부 사항에 들어가고 싶지는 않지만 여기에 개요가 있습니다.
1.1 p_id가 null이면 루트 노드입니다.
1.2 id가 p_id에 있으면 내부 노드입니다.
1.3 그렇지 않으면 리프 노드입니다.

2. 천재적인 접근 방식(적어도 제 생각에는)


If 기능 사용

코드는 다음과 같습니다.

SELECT
    atree.id,
    IF(ISNULL(atree.p_id),
        'Root',
        IF(atree.id IN (SELECT p_id FROM tree), 'Inner','Leaf')) Type
FROM
    tree atree
ORDER BY atree.id


그것을 분해하자,
  • atree를 트리 테이블의 별칭으로 설정합니다.
  • 트리 테이블에서 id를 선택합니다.

  • 여기서 흥미로운 점!!!!
    3. If 함수 생성

    General usage of If function 👇
    
    `If(10>27, YES, NO)` 
    It states that if condition `10>27` is true then **YES** else **NO**.
    


    지금,IF(ISNULL(atree.p_id),'Root'상태,p_id가 null이면 루트로 설정합니다.
    (그리고 마찬가지로 1.1의 조건이 만족되었습니다)
    4. 또 다른 If 함수가 first If function as an Else condition 내부에 내장되어 있습니다.IF(atree.id IN (SELECT p_id FROM tree), 'Inner','Leaf')이것은 다음과 같이 말합니다.idp_id에 있으면 'Inner'로 설정하고 그렇지 않으면 'Leaf'로 설정합니다.

    (그래서 우리의 조건 1.2, 1.3이 만족되었어요🤩)

    The genius behind this solution is designing it by utilizing of simple functions ordered in a perfect way.
    As complex as it may seem, as simple it is I believe.



    여기까지 했다면 이것에 대해 어떻게 생각하는지 알려주고 흥미로운 문제/해결책이 더 있으면 댓글에 언급하십시오.

    좋은 웹페이지 즐겨찾기