[MySQL] 프로그래머스 문제풀이 (GROUP BY)

윤경·2021년 10월 15일
0

프로그래머스

목록 보기
15/16

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

SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

GROUP BY: 특정 컬럼을 그룹화
HAVING: 특정 컬럼을 그룹화한 결과에 조건을 거는

📌 WHEREHAVING의 차이
WHERE는 그룹화 하기 전, HAVING은 그룹화 된 후의 조건

EX.

SELECT 컬럼
FROM 테이블
WHERE 조건식
GROUP BY 그룹화 할 컬럼
SELECT 컬럼
FROM 테이블
WHERE 조건식
GROUP BY 그룹화 할 컬럼
HAVING 조건식

동명 동물 수 찾기

SELECT NAME, COUNT(NAME) AS 'COUNT' 
FROM ANIMAL_INS 
GROUP BY NAME 
HAVING COUNT(NAME) > 1 
ORDER BY NAME

GROUP으로 묶은 후 조건을 줄 땐 HAVING 절 사용 (WHERE이 아닌)

AS를 이용해 이름을 바꿔주기


입양 시각 구하기(1)

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

HOUR(DATETIME) HOUR: 조회 결과 나온 열의 이름을 HOUR로 설정
COUNT(DATETIME) COUNT: 조회 결과 나온 열의 이름을 COUNT로 설정


입양 시각 구하기(2)

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

SET: 어떤 변수에 특정 값을 할당하는 것(변수 선언)
EX. SET @var=1;, SET @var:=1;, SELECT @var:=1

:=: MySQL에서 대입 연산자로만 사용

HOUR 변수를 -1로 선언해놓고 22까지 1씩 증가시킴
그리고 DATETIMEHOURHOUR 변수 값이 동일할 때 행 카운트


profile
개발 바보 이사 중

0개의 댓글