문제 설명
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
'Code KATA > SQL 코드카타' 카테고리의 다른 글
[2024.12.07] 동명 동물 수 찾기 (0) | 2024.12.09 |
---|---|
[2024.12.06] 동물 수 구하기 (0) | 2024.12.06 |
[2024.12.05] 동물의 아이디와 이름 (1) | 2024.12.05 |
[2024.12.04] 중복 제거하기 (0) | 2024.12.05 |
[2024.12.02] 이름이 있는 동물의 아이디 (0) | 2024.12.03 |