SELECT ANIMAL_TYPE, COUNT(ANIMAL_ID)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
--WHERE 절로 대체 가능
HAVING ANIMAL_TYPE = "Cat" OR ANIMAL_TYPE = "Dog"
ORDER BY ANIMAL_TYPE;
HAVING 절
: 집계함수를 가지고 조건 비교를 할 때 사용 (cf. WHERE 절에서는 집계함수 사용 불가)
- 보통 GROUP BY절과 함께 사용
SELECT NAME, COUNT(NAME) AS cnt
FROM ANIMAL_INS
GROUP BY NAME
HAVING cnt >= 2
ORDER BY NAME;
AS 절
: 필드 명이나 테이블의 이름을 다시 지을 때 사용
SELECT HOUR(DATETIME), COUNT(ANIMAL_ID)
FROM ANIMAL_OUTS
WHERE 9 <= HOUR(DATETIME) AND HOUR(DATETIME) <= 19
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME);
날짜 데이터에서 일부만 추출하기
YEAR: 연도 추출
MONTH: 월 추출
DAY: 일 추출 (또는 DAYOFMONTH)
HOUR: 시 추출
MINUTE: 분 추출
SECOND: 초 추출
WITH RECURSIVE TEMP AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1 FROM TEMP WHERE HOUR < 23
)
SELECT TEMP.HOUR, COUNT(HOUR(ANIMAL_OUTS.DATETIME)) AS COUNT
FROM TEMP LEFT JOIN ANIMAL_OUTS
ON TEMP.HOUR = HOUR(ANIMAL_OUTS.DATETIME)
GROUP BY TEMP.HOUR
ORDER BY TEMP.HOUR;
WITH RECURSIVE 문
: 메모리 상에 가상의 테이블 저장WITH RECURSIVE 테이블명 AS( SELECT 초기값 AS 컬럼 별칭 UNION ALL SELECT 컬럼 별칭 계산식 FROM 테이블명 WHERE 제어문 )
- UNION ALL: 중복제거 안하는 합집합
- UNION: 중복제거를 하는 합집합
📍 JOIN은 다른 포스팅에서 정리