[프로그래머스] GROUP BY

joon_1592·2022년 4월 26일
0

SQL

목록 보기
3/11

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

SELECT ANIMAL_TYPE, COUNT(*) AS COUNT
FROM ANIMAL_INS
WHERE ANIMAL_TYPE IN ('Cat', 'Dog') -- 고양이와 개
GROUP BY ANIMAL_TYPE -- 동물 종류로 그룹
ORDER BY ANIMAL_TYPE -- 순서: 고양이 > 개

동명 동물 수 찾기

SELECT NAME, COUNT(NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME

입양 시각 구하기 (1)

SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
-- WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
WHERE 9 <= HOUR(DATETIME) <= 19
GROUP BY HOUR
ORDER BY HOUR

입양 시각 구하기 (2)

위의 (1)번 문제와 다르게, 테이블에 없는 시각까지 나타내야 한다.
따라서 WITH를 이용하여 0시부터 23시 까지 값을 갖는 테이블을 만들고, 이후 JOIN을 이용하여 입양 시각 별로 COUNT로 센다.

WITH RECURSIVE HOUR_TABLE AS(
    SELECT 0 AS HOUR
    UNION ALL
    SELECT HOUR + 1
    FROM HOUR_TABLE
    WHERE HOUR < 23
)
    
SELECT HOUR AS DATE, COUNT(ANIMAL_ID) AS COUNT
FROM HOUR_TABLE
LEFT OUTER JOIN ANIMAL_OUTS
ON HOUR(DATETIME) = HOUR_TABLE.HOUR

GROUP BY HOUR
profile
공부용 벨로그

0개의 댓글