프로그래머스 연습문제- MY SQL(1)

ho's·2022년 7월 9일
0

🏀 중복제거하기

SELECT count(DISTINCT NAME) as count FROM ANIMAL_INS;

🌏 GROUP BY

🚁 고양이와 개는 몇 마리 있을까

SELECT ANIMAL_TYPE, count(ANIMAL_TYPE) as count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE;

🚁 동명 동물 수 찾기

SELECT ANIMAL_TYPE, count(ANIMAL_TYPE) as count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE;

오답하기 쉬운 답

SELECT ANIMAL_TYPE, count(ANIMAL_TYPE) as count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER;

위의 코드와 다른점은 ORDER BY가 빠졌다는 것이다.
주어진 문제에서 조건이 아래와 같이 주어졌으므로, ORDER BY를 해야한다.

🚁 동명 동물 수 찾기

SELECT NAME ,count(NAME) as count FROM ANIMAL_INS GROUP BY NAME HAVING count >1 ORDER BY NAME;

Having을 이용하자..!

🚁 입양 시각 구하기(1)

SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR
ORDER BY HOUR;

🚁 입양 시각 구하기(2)

-- 코드를 입력하세요
SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 0 AND HOUR(DATETIME) <=23
GROUP BY HOUR
ORDER BY HOUR;
  • 위의 입양시각 구하기(1)과 같은 코드를 입력하면 아래와 같은 결과를 얻는다.

위 코드의 문제점은 count가 0인 부분은 체크가 되지 않는다는 것이다.
어떻게 해야할까?

위의 sql문의 where 부분은 DATETIME >= 0 AND DATETIME <= 23 인 부분인 곳에서 GROUPBY가 일어나므로 수정을 할 수 없을 것 같다.
어떻게 해야할까..🤯

찾아보니 SET함수를 이용하란다.

알아보도록하자.

SET @HOUR = -1;
SELECT (@HOUR := @HOUR+1) AS HOUR
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
  • SET 함수 만들기. (변수명 앞에 @를 붙여 사용한다)
    SET @HOUR = -1
    HOUR라는 변수에 -1값을 넣어준다.

SELECT (@HOUR := @HOUR+1) AS HOUR
변수 HOUR +1 한값을 HOUR에 넣어준다.

WHERE @HOUR < 23;
@HOUR = 22 까지 반복되어서 마지막의 @HOUR의 값은 23이 된다.

전체 쿼리문

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
ORDER BY HOUR;

🏐 IS NULL

🎅 이름 없는 동물의 아이디

아래 쿼리문을 실행시켜 보자.

SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME = NULL;

위의 코드는 다음과 같이 아무것도 나오지 않는다.

NULL인 부분은 어떻게 조회할까?

ISNULL, NOTNULL 을 이용하자.

SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL;

생각보다 간단하게 해결이 된다.

🎅 이름 없는 동물의 아이디

SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL; 

🎅 NULL 처리하기

SELECT ANIMAL_TYPE, IF(NAME IS NOT NULL, NAME, 'No name') AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID;

https://velog.io/07d7d3b8-2bda-40e5-bc33-dcf8d025d085)

IF문을 이용해 풀 수 있다.

IF(조건 , T , F)
조건이 참이라면 T, 거짓이라면 F 반환

SELECT IF( 1 > 2, '1은 2보다 크다.' , '1은 2보다 작다.');
profile
그래야만 한다

0개의 댓글