1. UNPIVOT 예제
SELECT *
FROM order2
UNPIVOT (건수 for 아이템 in (BICYCLE, CAMERA, NOTEBOOK));
--열로 된 컬럼명(BICYCLE, CAMERA, NOTEBOOK)들을 '아이템'이라는 컬럼명으로 세로로 출력
--원래 값들은 건수라는 컬럼명으로 세로로 출력
# as 로 이름값 변경
SELECT *
FROM order2
UNPIVOT (건수 for 아이템 in (BICYCLE as 'B', CAMERA as 'C', NOTEBOOK as 'N'));
2. 구구단 출력 문제
WITH LOOP_TABLE AS (SELECT LEVEL AS NUM
FROM DUAL
CONNECT BY LEVEL <=9)
SELECT '2' || 'x' || NUM || '=' || 2 * NUM as "2단"
FROM LOOP_TABLE;
# 구구단 9단 출력 문제 (이중LOOP문)
WITH LOOP_TABLE AS ( SELECT LEVEL AS NUM
FROM DUAL
CONNECT BY LEVEL <= 9 ),
GUGU_TABLE AS ( SELECT LEVEL + 1 AS GUGU
FROM DUAL
CONNECT BY LEVEL <= 8 )
SELECT TO_CHAR( A.NUM ) || ' X ' || TO_CHAR( B.GUGU) || ' = ' ||
TO_CHAR( B.GUGU * A.NUM ) as 구구단
FROM LOOP_TABLE A, GUGU_TABLE B;
3. 삼각형, 사각형 출력 문제
3-1. 직각삼각형 출력
# 직각삼각형 출력 문제
WITH LOOP_TABLE AS (SELECT LEVEL AS NUM
FROM DUAL
CONNECT BY LEVEL <=8)
SELECT LPAD('★', NUM, '★') AS STAR
FROM LOOP_TABLE;
3-2. 삼각형 출력
# 삼각형 출력 문제
WITH LOOP_TABLE AS (SELECT LEVEL AS NUM
FROM DUAL
CONNECT BY LEVEL <= 8)
SELECT LPAD(' ', 10-NUM, ' ') || LPAD('★', NUM, '★') AS "직각삼각형"
FROM LOOP_TABLE;
# 삼각형 치환변수(&) 사용
WITH LOOP_TABLE AS (SELECT LEVEL AS NUM
FROM DUAL
CONNECT BY LEVEL <= &숫자1)
SELECT LPAD(' ', &숫자2 -NUM, ' ') || LPAD('★', NUM, '★') AS "직각삼각형"
FROM LOOP_TABLE;
3-3. 마름모 출력
- undefine 명령어로 변수에 담겨있는 내용 지우기고, accept으로 값을 받아 p_num변수에 담는다.
- prompt로 ‘숫자입력’창을 화면에 출력하고 입력한 숫자를 p_num에 입력한다.
UNDEFINE p_num
Accept p_num PROMPT '숫자입력 : '
SELECT LPAD(' ',&p_num-level, ' ') || RPAD('★', level, '★') AS STAR
FROM DUAL
CONNECT BY level < &p_num+1
UNION ALL
SELECT LPAD(' ',level, ' ') || RPAD('★', (&p_num)-level, '★') as star
FROM dual
CONNECT BY level < &p_num;
3-4. 사각형 출력
UNDEFINE p_n1
UNDEFINE p_n2
ACCEPT p_n1 PROMPT '가로 숫자 입력 :';
ACCEPT p_n2 PROMPT '세로 숫자 입력 :';
WITH LOOP_TABLE AS (SELECT LEVEL AS NUM
FROM DUAL
CONNECT BY LEVEL <= &p_n2) -- 세로 숫자
SELECT LPAD('★', &p_n1, '★') as STAR -- 가로 숫자
FROM LOOP_TABLE;
4. 그룹별 최고값, 최소값 가져오기
CREATE TEMP TABLE TEST_TEMP_TABLE
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY USER_NAME ORDER BY AGE) AS ROWIDX
FROM TEST_TABLE) AS TB01)
WHERE ROWIDX = 1;
5. 1~10 숫자의 합
UNDEFINE p_n
ACCEPT p_n prompt '숫자 값 입력:'
SELECT SUM(LEVEL) AS 합계
FROM DUAL
CONNECT BY LEVEL <= &p_n;
6. 1~10 숫자의 곱
자연로그함수(LN)를 이용해서 입력받은 숫자를 곱하기
UNDEFINE p_n
ACCEPT p_n prompt '숫자 값 입력:'
SELECT ROUND(EXP(SUM(LN(LEVEL)))) 곱
FROM DUAL
CONNECT BY LEVEL <= &P_N;
7. 1~10 숫자의 짝수만 출력
UNDEFINE P_N
ACCEPT P_N PROMPT '숫자 값 입력:';
SELECT LISTAGG(LEVEL, ', ') AS 짝수 -- 하나의 열로 출력되게 함
FROM DUAL
WHERE MOD(LEVEL, 2) = 0 --MOD 나눈 나머지 출력
CONNECT BY LEVEL <= &P_N
8. 1~10 숫자에서 소수만 출력
UNDEFINE P_N
ACCEPT P_N PROMPT '숫자 값 입력:';
WITH LOOP_TABLE AS (SELECT LEVEL AS NUM
FROM DUAL
CONNECT BY LEVEL <= &P_N)
SELECT L1.NUM AS 소수
FROM LOOP_TABLE L1, LOOP_TABLE L2
WHERE MOD(L1.NUM, L2.NUM) = 0 -- 자신의 수와 나눈 나머지 값이 0 이 되는 수로 검색
GROUP BY L1.NUM
HAVING COUNT(L1.NUM) = 2; -- 소수는 1과 자신의 수로 나눠지므로 카운트되는 수는 2이다.
'🛠️Skill > SQL' 카테고리의 다른 글
[SQL문법] GROUP_CONCAT 그룹별 집계 (0) | 2022.12.14 |
---|---|
[SQL 문제] LISTAGG / 최대공약수, 최소공배수 / 직각삼각형 (0) | 2022.12.13 |
[oracle] 오라클 단축키 / 비밀번호 변경 (0) | 2022.12.12 |
[SQL문법] 날짜, 시간 더하기 (DATE_ADD, DATE_SUB) (0) | 2022.12.09 |
[SQL 문법] SUBSTR 특정 문자 추출 , LENGTH / CHAR_LENGTH 길이 추출, INSTR 위치 추출 (0) | 2022.12.03 |
댓글