SELECT count(DISTINCT NAME) as count FROM ANIMAL_INS;
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;
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;
-- 코드를 입력하세요
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;
위 코드의 문제점은 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 @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;
아래 쿼리문을 실행시켜 보자.
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME = NULL;
위의 코드는 다음과 같이 아무것도 나오지 않는다.
NULL인 부분은 어떻게 조회할까?
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL;
생각보다 간단하게 해결이 된다.
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT 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보다 작다.');