sql에서 유형별로 개수를 가져오고 싶을 떄는 column에 데이터를 그룹화 할 수 있는 GROUP BY
를 사용하면 된다.
GROUP BY
: 특정 column을 그룹화 할 때HAVING
: 특정 컬럼을 그룹화한 결과에 조건을 걸 때(WHERE
은 그룹화 전, HAVING
은 그룹화 후)SELECT col FROM table GROUP BY groupcol
SELECT col FROM tabel GROUP BY groupcol HAVING col >= 2
SELECT ANIMAL_TYPE, COUNT(*)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
SELECT NAME, COUNT(NAME) AS cnt
FROM ANIMAL_INS
GROUP BY NAME
HAVING cnt >= 2
ORDER BY NAME
HOUR()
함수를 이용해서 DATETIME 중 시간만 추출할 수 있다.
SELECT HOUR(DATETIME) h, COUNT(DATETIME)
FROM ANIMAL_OUTS
GROUP BY h(DATETIME)
HAVING h >= 9 AND h <= 19
ORDER BY h
조건문으로 WHERE
을 이용할 수도 있다.
SELECT HOUR(DATETIME), COUNT(DATETIME)
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)
갑자기 level4로 난이도가 올라갔다.
@
가 앞에 붙은 변수는 프로시저가 끝나도 계속 유지된다.
SET @hour := -1; -- 변수 선언
SELECT (@hour := @hour + 1) as HOUR,
(SELECT COUNT(DATETIME) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour)
FROM ANIMAL_OUTS
WHERE @hour < 23
GROUP BY
: https://extbrain.tistory.com/56HOUR()
: https://extbrain.tistory.com/60