일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 순환
- BFS
- Kotlin
- CSS
- javascript
- java
- codecademy
- 검색트리
- 클린코드
- CleanCode
- 알고리즘
- inflearn
- DFS
- SWEA
- algorithm
- DP
- Color
- front-end
- html
- 코딩테스트
- 구현
- 자바
- SQL
- 해슁
- 다이나믹 프로그래밍
- Web
- Spring
- android
- 프로그래머스
- 정렬
- Today
- Total
깡뇽
[프로그래머스] SQL High Score Kit - String, Data 본문
루시와 엘라 찾기
#방법1
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
WHERE NAME IN ('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty')
ORDER BY ANIMAL_ID;
#방법2
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
HAVING NAME = 'Lucy' OR NAME = 'Ella' OR NAME = 'Pickle' OR NAME = 'Rogan' OR NAME = 'Sabrina' OR NAME = 'Mitty'
ORDER BY ANIMAL_ID;
내가 작성한 쿼리는 방법2인데 너무 비효율적이라고 생각하여 해답을 찾아보았더니 많은 사람들이 IN을 활용한 방법1의 쿼리로 작성하여 문제를 풀었다.
WHERE 컬럼명 IN(값1, 값2, ..) : 컬럼에 IN 괄호 안의 값1, 값2, ...을 가지는 행 추출
이름에 el이 들어가는 동물 찾기
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE NAME LIKE '%EL%' AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME;
WHERE 컬럼명 LIKE '%문자%' : 컬럼명에 문자 앞뒤에 어떤 문자든 상관없이 문자를 포함하는 행 추출
WHERE 컬럼명 LIKE '_문자__' : 컬럼명에 문자 앞에는 한 글자, 뒤에는 두개의 문자와 함께 표현되는 행 추출
-> %는 모든 문자, _는 하나의 문자를 의미
중성화 여부 파악하기
#방법1
SELECT ANIMAL_ID, NAME, IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%SPAYED%', 'O', 'X') AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
#방법2
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE "%neuterEd%" OR SEX_UPON_INTAKE LIKE "%spAyed%"
THEN "O"
ELSE
"X"
END AS 중성화
FROM ANIMAL_INS
중성화를 한 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed' 단어가 들어 있으므로 방법1에서는 IF문과 함께 해당 문자를 포함하는지 LIKE를 활용하여 확인한 후 중성화를 했으면 O, 아니면 X를 넣어 추출한다. 방법2에서는 CASE를 활용하여 해당 문자가 포함되어 있을 때(WHEN)는 O를 그렇지 않을 때(ELSE)는 X를 넣어 데이터를 추출한다.
IF(조건, 조건이 참일 때, 조건이 거짓일 때)
CASE WHEN 조건 THEN 조건이 참일 때 ELSE 조건이 거짓일 때 END
오랜 기간 보호한 동물(2)
SELECT OUTS.ANIMAL_ID, OUTS.NAME FROM ANIMAL_OUTS AS OUTS
INNER JOIN ANIMAL_INS AS INS
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
ORDER BY INS.DATETIME - OUTS.DATETIME LIMIT 2;
ANIMAL_OUTS에 ANIMAL_INS를 조합하는데 두 테이블 모두에 ANIMAL_ID가 동일하게 존재하는 데이터 중에서 보호기간이 가장 긴 동물 순서(INS.DATETIME - OUTS.DATETIME)로 정렬했을 때에 위의 2마리의 정보를 추출한다.
DATETIME에서 DATE로 형 변환
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
DATE_FORMAT(컬럼명, '%Y-%m-%d') : DATETIME 타입의 정보를 가진 컬럼의 데이터를 년-월-일 형식으로 추출
%Y-%m-%d와 같은 형식은 원하는대로 바꿔서 사용할 수 있는데 이때 대소문자를 주의해서 사용해야 한다.
'Computer Language > SQL' 카테고리의 다른 글
[프로그래머스] SQL High Score Kit - SUM, MAX, MIN (1) (0) | 2023.10.20 |
---|---|
[프로그래머스] SQL High Score Kit - SELECT (1) (1) | 2023.10.20 |
[프로그래머스] SQL High Score Kit - JOIN (0) | 2022.03.03 |
[프로그래머스] SQL High Score Kit - IS NULL (0) | 2022.03.02 |
[프로그래머스] SQL High Score Kit - GROUP BY (0) | 2022.03.02 |