알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://programmers.co.kr/learn/challenges?tab=all_challenges 

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

Oracle Level 문제


Think🤔

상위 n개 레코드

여러 기준으로 정렬하기

동물의 아이디와 이름

어린 동물 찾기

아픈 동물 찾기

이름이 있는 동물의 아이디

역순 정렬하기

이름이 없는 동물의 아이디

최댓값 구하기

모든 레코드 조회하기


Solution✍
모든 동물 아이디와 이름,보호 시작일을 이름 순으로 조회
만약 이름이 같으면 보호를 나중에 시작한 동물

-- 코드를 입력하세요                         보호 시작일
SELECT ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION , NAME , SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY NAME, INTAKE_CONDITION DESC;


-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;

 

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME ASC
LIMIT 1;

MYSQL에서는 LIMIT 1이 있음 하지만 ORACLE에는 존재하지 않음


SELECT NAME
FROM ANIMAL_INS
WHERE ROWNUM = 1
ORDER BY DATETIME ASC;

SELECT A.NAME
FROM (SELECT *
      FROM ANIMAL_INS
      ORDER BY DATETIME) A
WHERE ROWNUM = 1;

인라인뷰 없이 생성되면 ROWNUM이 실행되고 그다음 ORDER BY 가 실행되서 ROWNUM의 값이 이상하게 나오는데 
프럼절에서 먼저 정렬을 해주고 그 NAME값을 ROWNUM 1로 찾으면 정렬 후 찾는거라 가능하다.
그냥 ID순으로 조회하는 문제

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;

모든 레코드는 SELECT의 별칭에서 ===> *로 바꾸면 그만
-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION LIKE 'Sick'
ORDER BY ANIMAL_ID;

아픈 동물 출력은 ID순으로!!
-- 코드를 입력하세요
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;
동물 보호소에 있고, 이름이 있음 , ID 오름차순

-- 코드를 입력하세요
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID;

이름이 널 이 아닌것
IS NOT NULL
그렇다면 <> NULL 이런건 될까?>

된다

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME <> 'NULL'
ORDER BY ANIMAL_ID;
-- 코드를 입력하세요
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID;
-- 코드를 입력하세요
SELECT A.DATETIME AS 시간
FROM (SELECT *
     FROM ANIMAL_INS
     ORDER BY DATETIME DESC) A
WHERE ROWNUM = 1;

서브쿼리에서 ';' 사용하면 안됨

Review🤩

LIMIT 대신 ROWNUM으로 처리하는 부분이 많아서 부족한 점을 배웠다.


 

+ Recent posts