programmers.co.kr/learn/courses/30/lessons/59404
1. 서론
order by에 대해 더 알게 된 시간이었다...
2. 문제 풀이
ANIMAL_INS: 동물 보호소에 들어온 동물의 정보를 담은 테이블
테이블 구조
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
(각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부)
Q. 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.
난 이 질문 때문에 엄청 고민했다... 내 머릿속에서는
if (a.name = b.name)
order by datetime desc
이런 상태로 받아들여졌기 때문이다. 그래서 서브 쿼리도 엄청 찾아봤지만 정렬의 순서를 정하는 건 서브 쿼리로는 되는 일도 아니고
이거 하나 하자고 PL/SQL을 쓰란 것도 아니고... 그런데 생각보다 문제는 간단했다.
그냥 이름순으로 정렬하는 와중에 이름이 같은 경우에는 나중에 보호소에 들어온 동물 순서로 정렬하면 되는 것이다.
그럼 정렬의 우선순위가 있어야 하나? 해서 또 우선순위에 대해서 찾아봤는데 이 두 조건에 대한 우선순위는 CASE, DECODE 이런 것 필요 없이 그냥 순서가 정해주는 것이었다.
ex) order by a, b
이렇게 적으면 이 문제에서 원하는 답을 얻을 수 있다. 즉, a순으로 정렬하다가 a가 같으니까 b 조건을 가져와서 정렬하는 것이다....
3. 코드 설명
SELECT animal_id, name, datetime
FROM animal_ins
ORDER BY name, datetime desc;
name, datetime 순으로 정렬해주는데 나중에 보호소에 들어온 순으로 정렬해야 하므로 desc을 적어준다.
나중에 들어온 datetime이 더 큰 값이기 때문에 역순으로 정렬해야 하기 때문이다.
'SQL' 카테고리의 다른 글
[ORACLE] 프로그래머스 동물 수 구하기 (0) | 2021.03.11 |
---|---|
[ORACLE] 프로그래머스 이름이 없는 동물의 아이디 (0) | 2021.03.11 |
[ORACLE] 프로그래머스 최솟값 구하기 (+MySQL) (0) | 2021.03.10 |
[ORACLE] 프로그래머스 동물의 아이디와 이름 (0) | 2021.03.10 |
[ORACLE] 프로그래머스 어린 동물 찾기 (0) | 2021.03.10 |