[프로그래머스] 아픈 동물 찾기, 여러 기준으로 정렬하기
프로그래머스의 SQL Kit에 있는 SELECT 문제들 중
- 아픈 동물 찾기
- 여러 기준으로 정렬하기
문제입니다.
1. 레코드에서 원하는 조건 조회하기
ANIMAL_INS 테이블에 동물들의 정보가 담겨 있습니다. 각 테이블에는 다음과 같은 column들이 있습니다.
NAME | TYPE | NULLABLE |
---|---|---|
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
위 정보들에서 아픈 동물(INTAKE_CONDITION=’Sick’)의 아이디와 이름을, 아이디 순으로 조회하는 SQL문을 작성해야 합니다.
- 조회 : SELECT 를 활용합니다.
- 조건 : WHERE 절을 활용합니다.
- 정렬 : order by 를 활용합니다.
조회할 열은 ANIMAL_ID 와 NAME이고, 그 데이터 중 INTAKE_CONDITION이 Sick 인 row만 출력해야 합니다. 그리고 order by 를 사용하여, 정렬 기준이 될 컬럼을 지정합니다.
1
SELECT animal_id, name FROM ANIMAL_INS where intake_condition = 'Sick' order by animal_id
2. 여러 기준으로 정렬하기
위 테이블 데이터들에서, 모든 동물의 아이디 / 이름 / 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해야 합니다.
단, 1. 이름이 같은 동물이 있다면 2. 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.
이 조건으로부터 order by 절에 들어갈 열 조건이 2개임을 알 수 있습니다.
- 조회 : SELECT 를 활용합니다.
- 정렬 : order by 를 활용합니다. order by 절에 쓰인 column 명 순서대로 정렬을 진행합니다. 이 때, 정렬 기준이 되는 열을 여러 개 지정하려면 ,로 연결하여 작성하면 됩니다.
- 예를 들어 order by NAME, DATETIME desc 이라고 쓰면, name의 오름차순 순서대로 정렬하고, name이 동일할 경우 DATETIME의 내림차순 순서대로 정렬하게 됩니다.
1
SELECT ANIMAL_ID, NAME, DATETIME from ANIMAL_INS order by NAME asc, DATETIME desc
- NAME 에 붙인 asc는 없어도 상관없지만, DATETIME을 내림차순 정렬하기 위해 붙인 desc와 구분이 더욱 잘 되도록 작성한 것입니다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges