본문 바로가기
[업무 지식]/MySQL

[recursive] Draw The Triangle

by 에디터 윤슬 2024. 12. 12.

링크

https://www.hackerrank.com/challenges/draw-the-triangle-1/problem

 

Draw The Triangle 1 | HackerRank

Draw the triangle pattern using asterisks.

www.hackerrank.com

 

문제

P(R) represents a pattern drawn by Julia in R rows. The following pattern represents P(5):

Write a query to print the pattern P(20).

 

정답 1

set @row_number = 21;

select repeat('* ', @row_number := @row_number -1 )
from information_schema.tables
limit 20;

정답 2

WITH RECURSIVE triangle AS (
    SELECT 20 AS n
    UNION ALL
    SELECT n - 1
    FROM triangle
    WHERE n > 1
)
SELECT REPEAT('* ', n)
FROM triangle;

정답 3

DELIMITER //
CREATE PROCEDURE draw_triangle()
BEGIN
    DECLARE i INT DEFAULT 20;
    WHILE i > 0 DO
        SELECT REPEAT('* ', i);
        SET i = i - 1;
    END WHILE;
END //
DELIMITER ;
CALL draw_triangle();

 

 

새롭게 이해한 내용

  • Recursive CTE(공통 테이블 표현식)는 SQL에서 계층적 데이터나 재귀적 관계를 처리할 때 유용한 기능입니다. 
  • 기본 개념
    • CTE 정의: CTE는 쿼리 내에서 일시적으로 사용할 수 있는 이름이 지정된 결과 집합입니다. 일반적으로 `WITH` 키워드를 사용하여 정의합니다.
    • 재귀적 CTE: 재귀적 CTE는 자기 자신을 참조하여 반복적인 처리를 수행할 수 있는 CTE입니다. 주로 계층 구조(예: 조직도, 파일 시스템) 또는 반복적인 계산을 처리하는 데 사용됩니다.
  • 구조
    • Recursive CTE는 두 부분으로 나뉩니다:
      • Anchor Member: 재귀를 시작하는 초기 쿼리입니다. 이 부분은 재귀의 첫 번째 단계에서 실행되며, 기본 데이터를 제공합니다.
      • Recursive Member: Anchor Member의 결과를 기반으로 반복적으로 실행되는 쿼리입니다. 이 쿼리는 자기 자신을 참조하여 재귀적으로 데이터를 처리합니다.
  • 작동 방식
    • 초기 실행: Anchor Member가 먼저 실행되어 초기 결과 집합을 생성합니다.
    • 반복 실행: Recursive Member가 Anchor Member의 결과를 입력으로 받아 반복적으로 실행됩니다. 각 단계에서 이전 단계의 결과를 사용하여 새로운 데이터를 생성합니다.
    • 종료 조건: 재귀는 더 이상 새로운 결과가 생성되지 않을 때까지 계속됩니다. 일반적으로 WHERE 절이나 JOIN 조건을 통해 종료 조건을 설정합니다.
  • 예시
WITH RECURSIVE OrgChart AS (
    -- Anchor Member
    SELECT employee_id, manager_id, employee_name
    FROM employees
    WHERE manager_id IS NULL  -- 최고 경영자(CEO)를 선택

    UNION ALL

    -- Recursive Member
    SELECT e.employee_id, e.manager_id, e.employee_name
    FROM employees e
    INNER JOIN OrgChart o ON e.manager_id = o.employee_id
)
SELECT * FROM OrgChart;

Anchor Member는 CEO와 같은 최상위 관리자를 선택합니다.
Recursive Member는 각 직원의 매니저 ID를 기준으로 조직도를 확장합니다.

 

'[업무 지식] > MySQL' 카테고리의 다른 글

[QCC] Query Challenge Cycle  (0) 2025.01.03
[recursive] Print Prime Numbers  (0) 2024.12.13
[날짜 그룹화] SQL Project Planning  (0) 2024.12.03
[MAX() over()] Challenges  (0) 2024.11.29
[row index] Weather Observation Station 20  (0) 2024.11.25