SQL_ORACLE

ORACLE SQL, Programmers 문제

유호야 2021. 3. 29. 16:28
반응형

programmers 코딩테스트

SQL 
Level 4
X 우유와 요거트가 담긴 장바구니
      ㄴ SELECT DISTINCT(M.CART_ID) CART_ID FROM (
SELECT CART_ID, NAME FROM CART_PRODUCTS WHERE NAME = 'Milk') M,
(SELECT CART_ID, NAME FROM CART_PRODUCTS WHERE NAME = 'Yogurt') Y
WHERE M.CART_ID = Y.CART_ID ORDER BY CART_ID;
ㄴ SELECT cart_id FROM cart_products WHERE name = 'Milk'
INTERSECT SELECT cart_id FROM cart_products WHERE name = 'Yogurt'
ORDER BY  cart_id;

X 입양 시각 구하기(2)
SELECT A.HOUR, CASE WHEN B.COUNT IS NULL THEN 0 ELSE B.COUNT END AS COUNT FROM (SELECT LEVEL-1 HOUR FROM DUAL CONNECT BY LEVEL <= 24) A LEFT JOIN ( SELECT TO_CHAR(DATETIME, 'HH24') HOUR, COUNT(*) COUNT FROM ANIMAL_OUTS GROUP BY TO_CHAR(DATETIME, 'HH24') ORDER BY TO_CHAR(DATETIME, 'HH24')) B ON A.HOUR = B.HOUR ORDER BY A.HOUR;

보호소에서 중성화한 동물

Level 3 쉬웠음
 없어진 기록 찾기
오랜기간 보호한 동물(1)
          ㄴDUAL ROWNUM
있었는데요 없었습니다
오랜기간 보호한 동물(2)

Level 2
 1 최솟값구하기
           ㄴ SELECT MIN(DATETIME) FROM ANIMAL_INS;
 2 중복제거하기
         ㄴ SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS;
 3 NULL 처리하기
            ㄴSELECT ANIMAL_TYPE, CASE WHEN NAME IS NULL THEN 'No name' ELSE NAME END NAME, SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID;
                ㄴ SELECT ANIMAL_TYPE, NVL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID;
 4 입양 시각 구하기(1)
       ㄴ SELECT TO_CHAR(DATETIME, 'hh24') HOUR, COUNT(*) COUNT FROM ANIMAL_OUTS GROUP BY TO_CHAR(DATETIME, 'hh24') HAVING TO_CHAR(DATETIME, 'hh24') >= 09 AND TO_CHAR(DATETIME, 'hh24') < 20 ORDER BY HOUR;
 5 이름에 el이 들어가는 동물 찾기
          ㄴSELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE UPPER(NAME) LIKE '%EL%' AND ANIMAL_TYPE = 'Dog' ORDER BY NAME;
대소문자 구분 X > UPPER(NAME)
 6 DATETIME에서 DATE로 형 변환
TO_CHAR(DATETIME, 'yyyy-MM-dd')
 7 동물 수 구하기
 8 고양이와 개는 몇 마리 있을까
 9 동명 동물 수 찾기
        ㄴ HAVING COUNT(*) >= 2 AND NAME IS NOT NULL
10 루시와 엘라 찾기
WHERE name IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')

11 중성화 여부 파악하기 (한 번 더 )
ㄴ SELECT ANIMAL_ID, NAME, CASE WHEN SEX_UPON_INTAKE LIKE 'Intact%' then 'X' else 'O' end
as 중성화 from animal_ins order by animal_id;

Level 1 
 1 모든 레코드 조회하기 
 2 역순정렬하기
 3 어린 동물 찾기
        ㄴ WHERE NOT CONDITION = 'Aged';

 4 여러 기준으로 정렬하기
        ㄴ ORDER BY NAME, DATETIME DESC; 
 5 상위 n개 레코드
        ㄴ ROWNUM
 6 최댓값구하기
 7 아픈 동물 찾기
 8 동물의 아이디와 이름
 9 이름이 없는 동물의 아이디
10 이름이 있는 동물의 아이디 

반응형