링크
https://www.hackerrank.com/challenges/draw-the-triangle-1/problem
문제
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의 결과를 기반으로 반복적으로 실행되는 쿼리입니다. 이 쿼리는 자기 자신을 참조하여 재귀적으로 데이터를 처리합니다.
- Recursive CTE는 두 부분으로 나뉩니다:
- 작동 방식
- 초기 실행: 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 |