Code KATA/SQL 코드카타

[2024.12.03] 역순 정렬하기

iiblueblue 2024. 12. 3. 15:16

문제 설명

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

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

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

NAME DATETIME
Rocky 2016-06-07 09:17:00
Shelly 2015-01-29 15:01:00
Benji 2016-04-19 13:28:00
Jackie 2016-01-03 16:25:00
*Sam 2016-03-13 11:17:00

... 이하 생략

 

문제 풀이

풀이 언어 : MySQL

-- 코드를 입력하세요
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;

문제의 핵심이 되는 부분은 역순으로 출력하는 것이라고 생각한다.

 

결과 데이터에 NAME과 DATETIME이 표시되었기 때문에 SELECT문에 적어주고 정렬 방식을 설정하기 위해 ORDER BY절을 사용한다. 이때 기준은 ANIMAL_ID가 되기 때문에 ANIMAL_ID를 적어주고 역순(내림차순)으로 정렬하기 위해 DESC를 사용한다. 만약 오름차순으로 정렬할 시 ASC를 사용한다.

 

참고사항

SELECT절에 없는 칼럼도 ORDER BY에서는 사용할 수 있다.

 

관계형 데이터베이스가 데이터를 메모리를 올릴 때 행 단위로 모든 칼럼을 가져오게 되므로, SELECT 절에서 일부 칼럼만 선택하더라도 ORDER BY 절에서 메모리에 올라와 있는 다른 칼럼의 데이터를 사용할 수 있다.

 

단 예외인 경우는 다음과 같은 경우이다.

1. SELECT DISTINCT를 지정한 경우

2. GROUP BY절이 있는 경우

3. SELECT문에 UNION 연산자가 있는 경우

4. 서브쿼리를 벗어나는 경우 SELECT절에 정의된 칼럼만 메인쿼리에서 재사용될 수 있다.

 

https://www.notion.so/ORDER-BY-8c42cddad6ca4782a6776c6b4a6bac58?pvs=4

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/59035