[ORACLE] 프로그래머스 고양이와 개는 몇 마리 있을까
2021. 3. 11.
반응형

programmers.co.kr/learn/courses/30/lessons/59040

 

코딩테스트 연습 - 고양이와 개는 몇 마리 있을까

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

 

 

1. 서론

 

조금 오버해서 어려웠던 문제

 

2. 문제 풀이

 

ANIMAL_INS: 동물 보호소에 들어온 동물의 정보를 담은 테이블

테이블 구조

ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE

(각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부)

 

Q. 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

 

고양이와 개를 count 하는 문제. 그리고 고양이 (Cat)가 개(Dog) 보다 먼저 나와야 한다.

animal_type을 이용해서 그냥 count 하면 되는데 정렬할 때 고양이가 개보다 먼저 나와야 한다는 거에 정신 팔려서 order by 할 때 decode를 썼다.(정렬 시 우선순위를 정할 수 있음)

 

decode 참조: huskdoll.tistory.com/343

 

오라클 사용자 정의 정렬 (DECODE, ORDER BY)

개발 도중 국가 코드와 국가명을 selectbox에 보여주는 화면이 있었는데 자주 선택하는 국가(대한민국, 미국, 일본, 중국...)들은 상단에 노출하고 나머지는 가나다 정렬을 해야 하는 경우가 생겼습

huskdoll.tistory.com

그런데 생각해보니까 Cat, Dog 니까 그냥 알파벳 순으로 정렬하면 당연히 고양이가 먼저 나오는 것이다... 그래서 저렇게 오버할 필요 없이 그냥 order by 만 해도 된다.

 

3. 코드 설명

 

SELECT animal_type, count(animal_type)
FROM animal_ins
GROUP BY animal_type
ORDER BY animal_type
--ORDER BY decode(animal_type, 'Cat','1', 'Dog', '2');

 

이렇게 심플할 수 없다. 이 문제의 핵심은 group by를 쓰는 것이다. 왜냐하면 함수와 변수를 같이 조회할 때는 group by를 써줘야 하기 때문이다... 이게 핵심인데 decode 찾아본 시간이 더 컸다... ㅎ

 

 

반응형
myoskin