https://programmers.co.kr/learn/courses/30/parts/17044
GROUP BY
AS 값 적용
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE
- 동물 보호소에 들어온(
FROM ANIMAL_INS
) 동물 중- 고양이와 개가 각각(
GROUP BY ANIMAL_TYPE
)- 몇 마리인지(
COUNT(ANIMAL_TYPE)
)- 조회하는(
SELECT
) SQL문을 작성하라.
-> 이 때, 고양이를 개보다 먼저(ORDER BY) 조회하라.
-> c가 d보다 사전순으로 앞서 있으므로
ORDER BY
의 default값인 ASC로 설정.
HAVING
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼 HAVING 조건식;
SELECT NAME, COUNT(NAME) AS COUNT FROM ANIMAL_INS GROUP BY NAME HAVING COUNT > 1 ORDER BY NAME
- NAME으로 GROUP BY (
GROUP BY NAME
)- 이름의 수가 2 이상인 것 (
HAVING COUNT > 1
)- NAME 기준으로 오름차순 정렬 (
ORDER BY NAME
)
WHERE
은 그룹화 하기 전 조건, AS 값 안먹음
HAVING
은 그룹화 후에 조건SELECT HOUR(DATETIME) HOUR, COUNT(DATETIME) COUNT FROM ANIMAL_OUTS WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19 GROUP BY HOUR ORDER BY HOUR
아래에 MySQL 함수들은 날짜 데이터에서
일부만을 추출할 수있습니다.
YEAR : 연도 추출
MONTH : 월 추출
DAY : 일 추출 (DAYOFMONTH와 같은 함수)
HOUR : 시 추출
MINUTE : 분 추출
SECOND : 초 추출
어떠한 변수에 특정한 값을 넣어줄 때 사용
@
는 변수명 앞에 넣어주어야한다.@HOUR=-1
이라는 것은:=
기호는 대입해준다는 뜻이다.0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요.
이때 결과는 시간대 순으로 정렬해야 합니다.
-> 데이터베이스에 없는 0부터 23시까지를 만들어야한다.SET @HOUR = -1; SELECT (@HOUR := @HOUR+1) AS HOUR FROM ANIMAL_OUTS WHERE @HOUR < 23;
다음으로 해결할 것은 COUNT한 테이블을 만들어주는 것이다.
HOUR 변수와 시간이 같을 때(HOUR(DATETIME) =@HOUR
) 카운트한다.
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;