-
프로그래머스) [SQL 고득점 KIT] 입양 시각 구하기, 중성화여부, 오랜기간 보호한 동물(2), DATETIME에서 DATE로 변환, NULL 처리하기SQL 2020. 6. 4. 21:36반응형
이전에 풀었던 한번씩 풀었던 문제들이지만, 리마인드를 위해 한번 다시 훑어봤다.
입양 시각 구하기
코딩테스트 연습 - 입양 시각 구하기(2)
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물
programmers.co.kr
풀기에 어려웠던 문제였다. 처음에도 그렇고, 지금도 그렇고 아직도 모르겠다..
SQL에서 변수를 설정하고 (편의상)반복문을 돌린 적이 없으니..
아무튼 MySql에서는 SET을 통해 변수를 설정할 수 있다. SET @변수명 = 초기값; 으로 변수를 만들어 줄 수 있다.
변수를 이용하는 반복문은 WHERE 조건에서 설정한 변수 값의 범위를 주는 것이다.
기억해둬야할 점
1. SET을 통해 변수를 설정할 수 있다. -> SET @변수명 = 초기값;
2. SET에서는 := 는 할당 연산자 =와 같다. 하지만, 비 SET 구문에서는 =를 동등연산자로 인식한다.
:::MySQL Korea:::
9.3. 사용자 정의 변수 여러분은 사용자 정의 변수에 값을 저장한 후에 나중에 그 값을 참조할 수 있다. 이를 통해 하나의 명령문에 있는 값을 다른 명령문으로 전달하는 것이 가능하다. 사용자
www.mysqlkorea.com
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;
중성화여부
코딩테스트 연습 - 중성화 여부 파악하기
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
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)
코딩테스트 연습 - 오랜 기간 보호한 동물(2)
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
이 문제는 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로 변환
코딩테스트 연습 - DATETIME에서 DATE로 형 변환
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
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 처리하기
코딩테스트 연습 - NULL 처리하기
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
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