반응형

 

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  위의 표는 동물 보호소에 들어온 동물의 정보를 담은 ANIMAL_INS 테이블의 구조를 나타낸 것으로

  각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타낸 것이다.

  아래 7개의 문제는 위 테이블에 대해 구하고자 하는 것을 구하는 것이다.

 

1. 모든 레코드 조회하기

  동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID 순으로 출력하는 문제이다.

  이 문제를 통해서 selectorder by를 사용했다. ( default - asc )

SELECT *
    FROM ANIMAL_INS
    ORDER BY ANIMAL_ID

 

  ANIMAL_INS 테이블의 모든 정보를 조회하므로 select * from animal_ins 를 해주고

  animal_id 순으로 조회하므로 order by animal_id를 해주면 된다.

 

2. 역순 정렬하기

  동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을  ANIMAL_ID 역순으로 출력하는 문제이다.

  이 문제에서 역순으로 정렬하기 위한 order by (기준) desc를 사용했다.

SELECT NAME, DATETIME
    FROM ANIMAL_INS
    ORDER BY ANIMAL_ID DESC

 

  이 문제는 동물의 모든 정보가 아닌 이름과 보호 시작일을 원하기 때문에 select name, datetime 을 해준 후 animal_id에 대해서는 역순으로 출력하기 때문에 order by animal_id desc를 해주었다.

* 이문제를 풀 때 datetime을 date_format을 사용하여 포매팅하지 않아야 정답으로 인정된다.

 

3. 아픈 동물 찾기

  동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 아이디 순으로 출력하는 SQL문을 작성하는 문제이다.

  이 문제에서는 조건을 확인하기 위해 where절을 사용했다.

 

SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS
    WHERE INTAKE_CONDITION = "Sick"
    ORDER BY ANIMAL_ID

 

  동물의 아이디와 이름을 출력하므로 select animal_id, name이다.

  아프다는 조건이 있으므로 intake_condition 컬럼에서 Sick인 것을 찾으면 된다. where intake_condition = "Sick"

* "Sick"가 아닌 "sick"를 입력했을 때도 정답 처리되는 것으로 보아 대소문자를 구분하지 않도록 설정이 돼있는 것으로 보인다.

 

4. 어린 동물 찾기

  동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 아이디 순으로 출력하는 문제이다.

  이 문제에서는 where절에서 비교연산자 "!="("<>")를 사용했다.

SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS
    WHERE INTAKE_CONDITION != "Aged"
    ORDER BY ANIMAL_ID

 

  문제에서 젊은 동물은 intake_condition이 Aged가 아니라고 문제에서 제시돼있기 때문에

  where절에 intake_condition != "Aged" 또는 intake_condition <> "Aged"를 해주면 된다.

* 위 문제와 마찬가지로 "" 안의 대소문자는 답에 영향을 주지 않았다.

 

5. 동물의 아이디와 이름

  동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID 순으로 출력하는 문제이다.

SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS
    ORDER BY ANIMAL_ID

 

6. 여러 기준으로 정렬하기

  동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순, 보호일 역순으로 출력하는 문제이다. 즉 이름이 같은 경우 보호일의 역순으로 출력해야 한다.

  순서를 두 컬럼에 대해서 봐야 하기 때문에 order by 뒤에 두 컬럼을 적어준다.

SELECT ANIMAL_ID, NAME, DATETIME
    FROM ANIMAL_INS
    ORDER BY NAME, DATETIME DESC

 

  문제의 조건에 따라 order by 에 두 컬럼을 적어주고 datetime에 대해서는 역순이어야 하므로 desc를 붙여주었다.

* 두 컬럼에 대해서 정렬할 경우 순서에 신경 써야 한다.

 

7. 상위 n개의 레코드

  동물 보호소에 가장 먼저 들어온 동물의 이름을 출력하는 문제이다.

  즉 상위 1개의 레코드를 출력하는 문제이기 때문에 limit 절을 사용해서 해결했다.

SELECT NAME
    FROM ANIMAL_INS
    ORDER BY DATETIME
    LIMIT 1

 

  order by 절을 통해 테이블을 datetime에 대해 오름차순으로 정렬한 후 한 줄만 출력하기 위해 limit 절을 사용했다.

반응형

+ Recent posts