[스파르타코딩클럽]데이터분석 과정/SQL
[SQL 코드카타] 181~183번(HackerRank)
doo_
2024. 2. 1. 15:33
181번 Draw The Triangle 1
> Set 함수에 대한 이해 부족으로 해답 참고
So, set 함수 복습 및 활용법 이해
SET @num = 21;
SELECT
repeat('* ', @num := @num - 1)
FROM
information_schema.tables
-- 임시로 사용되는 테이블로 횟수에 따라 반복되는 간단한 작업을 수행할 때 사용
WHERE
@num > 1;
> with recursive문에 대해서 배움
WITH RECURSIVE rnum AS -- 아래 as n 대신 rnum(n)으로도 가능
(SELECT 20 AS n
UNION ALL
SELECT n-1
FROM rnum
WHERE n > 1)
SELECT
REPEAT('* ', n)
FROM
rnum;
> 프로시저 생성 방법
DELIMITER :: -- 구분자 변경
CREATE PROCEDURE dstar() -- 프로시저 생성
BEGIN -- BEGIN ~ END
DECLARE i INT DEFAULT 20;
WHILE i>0 DO -- WHILE ~ END WHILE
SET @counter = REPEAT('* ',i);
SELECT @counter;
SET i = i-1;
END WHILE;
END;
::
Delimiter ;
call dstar();
182번 Draw The Triangle 2
> 181번의 반대로
SET @num = 0;
SELECT
repeat('* ', @num := @num + 1)
FROM
information_schema.tables
WHERE
@num < 20;
183번 Print Prime Numbers
> 파이썬을 통해서 소수 판별은 알지만, SQL은 익숙하지 않아서 결국 해답 참고...
SELECT GROUP_CONCAT(NUMB SEPARATOR '&')
FROM (
SELECT @num := @num + 1 as NUMB
FROM
information_schema.tables t1,
information_schema.tables t2,
(SELECT @num := 1) tmp
WHERE @num <= 1000
) tempNum
WHERE NOT EXISTS(SELECT *
FROM (SELECT
@nu := @nu + 1 as NUMA
FROM
information_schema.tables t1,
information_schema.tables t2,
(SELECT @nu := 1) tmp1
LIMIT 500
) con
WHERE FLOOR(NUMB/NUMA)=(NUMB/NUMA) AND NUMA<NUMB AND NUMA>1
)