[프로그래머스] SELECT level 1 문제풀이
1. 모든 레코드 조회하기
- 말 그대로 데이터에 포함된 모든 레코드를 조회하는 문제이다. 비교적 간단한 문제로 데이터 들어다 보지 않아도 풀 수 있었다.
- 테이블 명은 ANIMAL_INS
SELECT * FROM ANIMAL_INS; # ANIMAL_INS는 동물 보호소에 들어온 동물의 정보가 담긴 테이블
2. 역순 정렬하기
- 동물 보호소에 들어온 동물의 이름과 보호시작일을 조회하는 SQL문을 작성하고 이를 역순으로 보여주어야 한다.
- 이름과 일자를 선택하고 역순이니까 정렬을 수행하는 ORDER BY를 ANIMAL_ID컬럼을 기준으로 사용한다. 여기서 오름차순은 ASC 내림차순은 DESC를 이용하면 된다.
SELECT NAME, DATETIME FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;
3. 아픈 동물 찾기
- 동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회하는 SQL문을 작성하고 결과는 아이디순으로 조회해야 한다.
- 컬럼 중 INTAKE_CONDITION 컬럼의 ‘sick’을 포함한 데이터만 추출하면 될 것이다.
- WHERE을 통해 조건을 주면 답이 나온다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'sick';
4. 어린 동물 찾기
- 동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL문을 작성하고 결과는 아이디 순으로 조회한다.
- 여기서 젊은 동물이라 함은 INTAKE_CONDITION이 Aged가 아닌 동물을 의미한다. 위와 마찬가지로 INTAKE_CONDITION 컬럼에서 ‘Aged’가 아닌 동물을 찾으라는 조건을 추가하면 될 것이다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'; # != 연산자 중 같지 않음을 나타내는 것이다.
5. 동물의 아이디와 이름
- 동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해야 한다.
- 아까와 비슷하다. 위 처럼 조건이 따로 있지도 않다 그냥 SELECT에 ANIMAL_ID와 NAME 컬럼을 넣어주면 된다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS;
6. 여러 기준으로 정렬하기
- 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성하고 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여주어야 한다.
- ANIMAL_ID와 NAME, DATETIME 컬럼을 사용해 표현하되, 보호 시작일이 빠른 동물이 이름이 같아도 앞에 오도록 만들어야 한다.
- 이름 순으로 조회를 하기 떄문에 NAME은 오름차순이다. 하지만 동명의 동물일 경우 DATETIME이 최신인 동물이 앞에 와야하므로 내림차순으로 별개로 정렬을 해준다.
SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS
ORDER BY NAME ASC, DATETIME DESC; # ASC는 오름차순, DESC는 내림차순 정렬을 나타낸다.
7. 상위 n개 레코드
- 동물 보호소에서 가장 먼저 들어온 동물의 이름을 조회하는 SQL문을 작성해야 한다.
- 여기서는 이름컬럼을 선택하고 DATETIME을 기준으로 가장 먼저 들어온 동물을 찾아야 하므로 오름차순을 이용해 정렬한다.
- LIMIT을 이용해 개수를 제한 한다 여기서는 가장 먼저 들어온 동물 하나이기 때문에 LIMIT을 1로 지정한다.
SELECT NAME FROM ANIMAL_INS
ORDER BY DATETIME ASC
LIMIT 1;
Leave a comment