코딩일기
SQL 코드카타 181 - Draw The Triangle 1
서재일
2024. 8. 6. 14:22
https://www.hackerrank.com/challenges/draw-the-triangle-1/problem?isFullScreen=true
Draw The Triangle 1 | HackerRank
Draw the triangle pattern using asterisks.
www.hackerrank.com
P(R)은 줄리아가 R개의 행으로 그린 패턴을 나타냅니다. 다음 패턴은 P(5)를 나타냅니다:
* * * * *
* * * *
* * *
* *
*
패턴 P(20)을 출력하는 쿼리를 작성하세요.
SET @n = 20;
@n이이라는 변수를 생성하고 20을 저장한다.
WITH RECURSIVE cte AS (
SELECT @n AS num
UNION ALL
SELECT num - 1
FROM cte
WHERE num > 1
)
with 구문을 통해서 위의 서브쿼리를 cte라고 정의한다. 해당 서브쿼리는 num라는 열에 @n라는 값(최초에는 20) 값을 가진다. 그리고 union all로 기존의 cte쿼리의 num열의 값에 -1을 한 값과 결합을 한다. 그리고 그것을 현재의 num값(num-1이 된 상태이므로 0이 될때까지) 결합하여 num이라는 열에 20, 19, ... , 2, 1이라는 값들을 가지는 테이블을 CTE로 정의한다.
원래 해당사이트에서는 버전문제로 with 구문을 사용할 수 없었지만, 이 문제에서는 버전이 8.3.23으로 with 구문을 사용할 수 있었다.
-- SET @n = 20;
-- WITH RECURSIVE cte AS (
-- SELECT @n AS num
-- UNION ALL
-- SELECT num - 1
-- FROM cte
-- WHERE num > 1
-- )
SELECT * FROM cte;
위에서 작성한 cte테이블을 출력하면 20, 19, ... , 2, 1이 출력되는 것을 확인 할 수 있다.
-- SET @n = 20;
-- WITH RECURSIVE cte AS (
-- SELECT @n AS num
-- UNION ALL
-- SELECT num - 1
-- FROM cte
-- WHERE num > 1
-- )
-- SELECT
repeat('* ', num)
-- FROM cte;
repeat을 사용해서 *이라는 문자를 현재 열의 num값 만큼 반복하면 완료!\