루시와 엘라 찾기
- 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하기 위해 select 이후의 행을 입력한 후,
해당하는 NAME에 맞는 결과를 WHERE문을 통해 조회하였다.
아이디 순으로 조회하므로 ORDER BY 1(첫번째 행); (오름차순은 생략가능)을 통해 조회한다.
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
WHERE NAME='Lucy' OR NAME='Ella' OR NAME='Pickle' OR NAME='Rogan' OR NAME='Sabrina' OR NAME='Mitty'
ORDER BY 1;
이름에 el이 들어가는 동물 찾기
- 이름에 "EL"이 들어가는 개를 찾는 문제이므로 LIKE '%EL%' (%는 공백 또는 문자가 포함될 수 있다는 뜻)
를 사용하고 동물의 타입을 Dog로 설정한다.
위와 같이 조회시 소문자인 "el"과 같은 문자열은 포함시키지 않게 되므로
대소문자를 구분하지 않기 위해서 이름을 UPPER()를 통해 대문자로 통일시키는 과정이 필요하다.
SELECT ANIMAL_ID,NAME FROM ANIMAL_INS WHERE UPPER(NAME) LIKE '%EL%' AND ANIMAL_TYPE='Dog'
ORDER BY 2;
중성화 여부 파악하기
- 특정 컬럼의 조건에 따라 'O', 'X'를 택해야 하므로 자바의 IF~ELSE문과 같은 식으로
CASE WHEN 조건식1 THEN 결과1
WHEN 조건식2 THEN 결과2
.....
ELSE 나머지 결과
END
문을 통해 주어진 조건을 표현할 수 있다.
SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE='Neutered Male' THEN 'O'
WHEN SEX_UPON_INTAKE='Spayed Female' THEN 'O'
ELSE 'X'
END AS 중성화
FROM ANIMAL_INS ORDER BY 1;
오랜 기간 보호한 동물(2)
- 처음에 O.DATETIME-I.DATETIME의 차이를 조회하여 DESC를 하는 방식으로 조회하다 여러 차례 삽질 후
다른 풀이를 참고하며 작성하였다.
ORDER BY를 통해 둘의 차이를 계산하여 정렬이 가능하다는 점을 알 수 있었고,
ROWNUM을 통해 쿼리의 개수 제한을 걸 수 있다는 점을 알았다.
SELECT ANIMAL_ID, NAME
FROM (SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE I.ANIMAL_ID=O.ANIMAL_ID ORDER BY O.DATETIME-I.DATETIME DESC)
WHERE ROWNUM<=2;
DATETIME에서 DATE로 형 변환
- 처음에 형 변환을 위해 TO_DATE()를 사용했었기에 이를 찾아본 결과
TO_DATE는 아래와 같은 포맷으로만 작동한다.
날짜 포맷(형식)의 예
|
문자 예시
|
YYYY/MM/DD
|
2022/01/14
|
YYYY-MM-DD
|
2022-01-14
|
DD-Mon-YYYY
|
14-11-2022
|
따라서 주어진 DATETIME의 형태인 2018-01-22 14:32:00와 다르기에 TO_CHAR()를 사용하여
형변환을 시키는 것이 맞다.
SELECT ANIMAL_ID, NAME, TO_CHAR(DATETIME,'YYYY-MM-DD') as 날짜
FROM ANIMAL_INS ORDER BY 1;
'알고리즘 > SQL' 카테고리의 다른 글
[프로그래머스] Oracle : JOIN (0) | 2022.01.19 |
---|---|
[프로그래머스] Oracle : IS NULL (0) | 2022.01.12 |
[프로그래머스] Oracle : GROUP BY (0) | 2022.01.11 |
[프로그래머스] Oracle : SUM, MAX, MIN (0) | 2022.01.10 |
[프로그래머스] Oracle : SELECT (0) | 2022.01.06 |