본문 바로가기
🛠️Skill/SQL

[SQL 문제] LISTAGG / 최대공약수, 최소공배수 / 직각삼각형

by Istj_eff 2022. 12. 13.

1. LISTAGG

LISTAGG는 중복제외(DISTINCT)를 지원하지 않으므로 애초에 중복제외한 테이블에서 불러온다.

-- LISTAGG는 중복제외(DISTINCT)를 지원하지 않으므로 애초에 중복제외한 테이블에서 불러온다.
SELECT LISTAGG(DRIVER_NM, ',') WITHIN GROUP (ORDER BY DRIVER_NM) AS DRIVER_NM
FROM (SELECT DISTINCT DRIVER_NM FROM DRIVER_INFO

2. 두 숫자를 입력받아 최대 공약수를 출력

ACCEPT P_N1 PROMPT '첫 번째 숫자 입력:'
ACCEPT P_N2 PROMPT '두 번째 숫자 입력:'

WITH NUM_D AS (SELECT &P_N1 AS NUM1, &P_N2 AS NUM2
                FROM DUAL)
SELECT NUM1, NUM2, MAX(LEVEL) AS "최대공약수"
    FROM NUM_D
    WHERE MOD(NUM1, LEVEL) = 0
        AND MOD(NUM2, LEVEL) = 0
    CONNECT BY LEVEL <= NUM2;

 

 

3. 두 숫자를 입력받아 최소 공배수 출력

ACCEPT P_N1 PROMPT '첫 번째 숫자 입력:'
ACCEPT P_N2 PROMPT '두 번째 숫자 입력:'

WITH NUM_D AS (SELECT &P_N1 AS NUM1, &P_N2 AS NUM2
                FROM DUAL)
SELECT NUM1, NUM2,
    (NUM1/MAX(LEVEL))*(NUM2/MAX(LEVEL)) * MAX(LEVEL) AS "최소 공배수"
    FROM NUM_D
    WHERE MOD(NUM1, LEVEL) = 0
        AND MOD(NUM2, LEVEL) = 0
    CONNECT BY LEVEL <= NUM2;

 

4. 피타고라스의 공식으로 직각삼각형이 맞는지 출력

ACCEPT NUM1 PROMPT '밑변의 길이:';
ACCEPT NUM2 PROMPT '높이 :';
ACCEPT NUM3 PROMPT '빗변의 길이 :';

SELECT CASE WHEN
    ( POWER(&NUM1,2) + POWER(&NUM2,2) ) = POWER(&NUM3,2) --POWER 제곱함수
        THEN '직각삼각형이 맞습니다.'
        ELSE '직각삼각형이 아닙니다.' END AS "피타고라스의 정리"
FROM DUAL;

 

댓글