프로그래머스 SQL 고득점 Kit 문제풀이 1편 (SELECT 편)

문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.


1. 모든 레코드 조회하기 (LEVEL 1)

동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

풀이

SELECT * FROM ANIMAL_INS
ORDER BY ANIMAL_ID
  • SQL의 기본 문제이다. SELECT는 출력할 컬럼을 고르는 작업이다. 뒤에 * 을 넣으면 전체 정보를 출력해준다. ORDER BY 를 통해 정렬할 수 있다. 디폴트는 오름차순이다.


2. 역순 정렬하기 (LEVEL 1)

동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

NAMEDATETIME
Rocky2016-06-07 09:17:00
Shelly2015-01-29 15:01:00
Benji2016-04-19 13:28:00
Jackie2016-01-03 16:25:00
*Sam2016-03-13 11:17:00

풀이

SELECT NAME , DATETIME FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC
  • NAME과 DATETIME 을 SELECT 해주고 ORDER BY 옵션을 통해 정렬을 해주면 해결된다. 정렬할 때 DESC를 통해 내림차 순 정렬을 해야한다.



3. 아픈 동물 찾기 (LEVEL 1)

동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요. 아픈 동물은 INTAKE_CONDITION 컬럼값이 Sick 값을 가진다.

풀이

SELECT ANIMAL_ID , NAME FROM ANIMAL_INS
WHERE INTAKE_CONDITION = "Sick"
  • WHERE 를 통해 출력될 데이터의 조건을 지정해준다. 아픈 동물을 찾아야 하기 때문에, INTAKE_CONDITION = "Sick" 라고 써주면 된다.
  • Sick 은 문자기 때문에 따옴표를 써주어야 한다.



4. 어린 동물 찾기 (LEVEL 1)

동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
( INTAKE_CONDITION 컬럼 값이 Aged가 아닌 값을 가진 데이터가 어린 동물이다. )

풀이

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



5. 동물의 아이디와 이름 (LEVEL 1)

동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

ANIMAL_IDNAME
A349996Sugar
A350276Jewel
A350375Meo
A352555Harley
A352713Gia
A352872Peanutbutter
A353259Bj

풀이

SELECT ANIMAL_ID , NAME FROM ANIMAL_INS
ORDER BY ANIMAL_ID
  • ANIMAL_ID 순으로 정렬을 해야하기 때문에 ORDER BY 를 통해 ANIMAL_ID 를 오름차순으로 정렬해 주면 된다.



6. 여러 기준으로 정렬하기 (LEVEL 1)

동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

풀이

SELECT ANIMAL_ID , NAME, DATETIME FROM ANIMAL_INS
ORDER BY NAME , DATETIME DESC
  • ORDER BY 뒤에 컬럼명을 여러 개를 사용하면 여러 기준으로 정렬 기능을 이용할 수 있다. 또한, 각각 오름차순으로 정렬할지 내림차순으로 정렬할지 지정할 수도 있다.


7. 상위 n개 레코드 (LEVEL 1)

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

풀이 1

SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1
  • LIMIT를 사용한 방법이다. ORDER BY를 통해 데이터를 날짜순으로 정렬하고 LIMIT 1을 사용해 가장 먼저 들어온 동물의 이름을 출력할 수 있다.

풀이 2

SELECT NAME FROM ANIMAL_INS 
WHERE DATETIME = (SELECT MIN(DATETIME) FROM ANIMAL_INS)
  • 서브쿼리를 사용한 방법이다. 조건절 WHERE를 이용해 날짜가 최소값인 서브쿼리와 일치하는 결과를 출력하는 방법이다.
profile
Univ of Seoul , Statistics

0개의 댓글

Powered by GraphCDN, the GraphQL CDN