위의 표는 동물 보호소에 들어온 동물의 정보를 담은 ANIMAL_INS 테이블의 구조를 나타낸 것으로
각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타낸 것이다.
아래 7개의 문제는 위 테이블에 대해 구하고자 하는 것을 구하는 것이다.
1. 모든 레코드 조회하기
동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID 순으로 출력하는 문제이다.
이 문제를 통해서 select와 order 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 절을 사용했다.
'문제풀이 > 프로그래머스 SQL Kit' 카테고리의 다른 글
프로그래머스 SQL 고득점 Kit - 5. STRING, DATE (0) | 2020.04.03 |
---|---|
프로그래머스 SQL 고득점 Kit - 4. GROUP BY (0) | 2020.04.03 |
프로그래머스 SQL 고득점 Kit - 3. IS NULL (0) | 2020.04.01 |
프로그래머스 SQL 고득점 Kit - 2. SUM, MAX, MIN (0) | 2020.03.31 |