난이도 : 중하
소요시간 : 20분
앞에서 재귀함수로 골머리를 앓고 드디어 나온 재귀함수 문제 !
함수 작성은 약간 책의 도움을 받긴 했지만, 그래도 스스로 변수에 맞춰서 수정완료 ㅎ
설명을 하자면, p라는 함수에는 n 컬럼 존재, 처음엔 1 과 union으로 자기 스스로 값에 +1을 덧붙이게 됨.
=> 컬럼 n 출력하면,
=> 1
2
3
4
........ 이런식으로 출력될 것임.
문제는 숫자가 아닌 문자열을 갯수만큼 나오게 하는, 파이썬의 피라미드 세우기 같은 형태니까, 문자열*숫자로 출력진행
with recursive p (n)
as (
select 1
union all
select (n+1) from p where n<5
)
select ('*')*n from p;
=> 얘는 자꾸
0
0
0
0
0
이렇게 출력 됨. 알아보니 SQL에서 (문자열 * 숫자)는 문자열을 0으로 인식해서 항상 0값이 나오는 것.
그렇다면, ('*')*n 이부분을 고쳐야 하는데,,,, 뭔가 SQL 언어가 있을 것 같아서 책의 도움을 빌렸슴둥..ㅎ(*DO it SQL 입문)
+ 교재에 따르면,
"문자를 반복하는 함수 - REPEAT"
- REPEAT 함수는 지정한 문자를 반복할 때 사용한다. 이때, 반복할 문자와 반복 횟수를 인자로 전달하면 된다.
- ex) select repeat('p', 10) ; -> pppppppppp 출력 !
[정답 코드]
with recursive p (n)
as (
select 1
union all
select ((n+1)) from p where n<20)
select repeat('* ',n)
from p
order by n desc;
'SQL' 카테고리의 다른 글
[Hacker Rank] SQL_Intermediate_Medium (ROW_NUMBER/OVER) (0) | 2025.02.01 |
---|---|
[Hacker Rank] SQL_Intermediate_Medium (JOIN) (0) | 2025.01.31 |
[Hacker Rank] SQL_Intermediate_Medium (이진트리/Case When) (0) | 2025.01.30 |
[Hacker Rank] SQL_Basic_medium (union에서 order by) (0) | 2025.01.23 |
[Hacker Rank] SQL_Basic_Medium (power / abs) (0) | 2025.01.23 |