-
프로그래머스) [SQL 고득점 KIT] 입양 시각 구하기, 중성화여부, 오랜기간 보호한 동물(2), DATETIME에서 DATE로 변환, NULL 처리하기SQL 2020. 6. 4. 21:36반응형
이전에 풀었던 한번씩 풀었던 문제들이지만, 리마인드를 위해 한번 다시 훑어봤다.
입양 시각 구하기
풀기에 어려웠던 문제였다. 처음에도 그렇고, 지금도 그렇고 아직도 모르겠다..
SQL에서 변수를 설정하고 (편의상)반복문을 돌린 적이 없으니..
아무튼 MySql에서는 SET을 통해 변수를 설정할 수 있다. SET @변수명 = 초기값; 으로 변수를 만들어 줄 수 있다.
변수를 이용하는 반복문은 WHERE 조건에서 설정한 변수 값의 범위를 주는 것이다.
기억해둬야할 점
1. SET을 통해 변수를 설정할 수 있다. -> SET @변수명 = 초기값;
2. SET에서는 := 는 할당 연산자 =와 같다. 하지만, 비 SET 구문에서는 =를 동등연산자로 인식한다.
QUERY
SET @hour = -1; SELECT (@hour := @hour +1) AS 'HOUR', (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) AS 'COUNT' FROM ANIMAL_OUTS WHERE @hour <23;
중성화여부
CASE WHEN END 구문을 완벽하게 숙지하지 못한 것 같아서 포스팅에 남겨본다.
조건에 따라 값을 부여할 때, CASE WHEN END를 쓴다.
CASE WHEN 컬럼 = 조건 THEN 부여할 값 END; 로 표현할 수 있다.
또한
CASE 컬럼 WHEN 조건 THEN 부여 값 END; 로 표현할 수도 있다.
하지만 이 문제에서는 문자열에 특정 문자가 포함되는지 확인하는 LIKE 구문을 이용해야하기 때문에 첫번째로 작성한 구문으로 하는 것이 맞는 것 같다. (아래 표현은 하는 법을 모르겠어서인지 제대로 안나옴)
QUERY
SELECT ANIMAL_ID, NAME, (CASE WHEN SEX_UPON_INTAKE LIKE 'Neutered%' THEN 'O' WHEN SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O' ELSE 'X' END) AS '중성화' FROM ANIMAL_INS;
오랜 기간 보호한 동물(2)
이 문제는 LIMIT에 대한 기억을 남기려고 작성한다.
특정 조건에서 갯수 제한을 둘 때, LIMIT 숫자 를 적어, 입력한 숫자만큼만 테이블에 표시되도록 설정해준다.
또한, INNER JOIN과 WHERE 절 둘 다 이용해서 풀 수 있었다.
QUERY
## INNER JOIN SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS AS I JOIN ANIMAL_OUTS AS O ON I.ANIMAL_ID = O.ANIMAL_ID ORDER BY (O.DATETIME - I.DATETIME) DESC LIMIT 2; ## WHERE Clause #SELECT I.ANIMAL_ID, I.NAME #FROM ANIMAL_INS AS I, ANIMAL_OUTS AS O #WHERE I.ANIMAL_ID = O.ANIMAL_ID #ORDER BY O.DATETIME-I.DATETIME DESC LIMIT 2;
DATETIME에서 DATE로 변환
DATE_FORMAT 이라는 것이 익숙하지 않았다. DATE_FORMAT(DATETIME 컬럼명, "변환할 형식") 으로 표현한다.
이때, 변환할 형식에는 "%Y-%m-%d" 이런 식으로 표현하고, 대소문자에 따라서 값이 달라진다. 확인하자.
QUERY
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS '날짜' FROM ANIMAL_INS ORDER BY ANIMAL_ID;
NULL 처리하기
IFNULL 구문은 해당 컬럼이 NULL인 경우, 특정 값을 넣어줄 수 있다.
IFNULL(컬럼명, 넣을 값) 을 이용하면 된다. ( SELECT 안에서 이용하는듯)
QUERY
SELECT ANIMAL_TYPE, IFNULL(NAME,'No name') AS 'NAME', SEX_UPON_INTAKE FROM ANIMAL_INS;
반응형'SQL' 카테고리의 다른 글
MySQL 권한 설정 (0) 2021.04.29 프로그래머스) [SQL 고득점 KIT, JOIN] 없어진 기록 찾기, 있었는데요 없었습니다, 오랜 기간 보호한 동물(1), 보호소에서 중성화한 동물 (0) 2020.06.04 MySQL) Challenges (0) 2020.06.04 MySQL) Ollivander's Inventory (0) 2020.06.03 MySQL) Top Competitors (0) 2020.06.03