본문 바로가기

: IT/프로그래머스

[코딩테스트] MySQL > SELECT 문 (3)

반응형

1. GROUP BY > 동명 동물 수 찾기

SELECT NAME, COUNT(ANIMAL_ID) as 'COUNT'
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(ANIMAL_ID) >= 2
ORDER BY NAME ASC

- 이름(NAME)으로 그룹을 나누고, COUNT함수를 이용해서 동명 동물의 수를 조회한다
- HAVING 절에 같은 이름의 동물 수가 2개 이상으로 조건을 추가한다
- 이름 오름차순(ASC)으로 정렬한다


2. GROUP BY > 입양 시각 구하기(1)

SELECT DATE_FORMAT(DATETIME, '%H') AS 'HOUR', COUNT(ANIMAL_ID) AS 'COUNT'
FROM ANIMAL_OUTS
WHERE DATE_FORMAT(DATETIME, '%H') BETWEEN '09' AND '19'
GROUP BY DATE_FORMAT(DATETIME, '%H')
ORDER BY DATE_FORMAT(DATETIME, '%H')

- DATE_FORMAT 함수를 이용해서 시간만 표시하도록 했습니다.
- 그 시간에 입양이 몇건 발생했는지 COUNT 함수를 이용해서 조회했습니다
- 시간대를 오름차 순으로 정렬했습니다


3. GROUP BY > 입양 시각 구하기(2)

SELECT h.Hour as 'HOUR', COUNT(ANIMAL_ID) AS 'COUNT'
FROM ( SELECT 0 AS Hour
       UNION ALL SELECT 1   
       UNION ALL SELECT 2 
       UNION ALL SELECT 3 
       UNION ALL SELECT 4   
       UNION ALL SELECT 5 
       UNION ALL SELECT 6 
       UNION ALL SELECT 7 
       UNION ALL SELECT 8 
       UNION ALL SELECT 9 
       UNION ALL SELECT 10 
       UNION ALL SELECT 11
       UNION ALL SELECT 12
       UNION ALL SELECT 13
       UNION ALL SELECT 14
       UNION ALL SELECT 15
       UNION ALL SELECT 16
       UNION ALL SELECT 17
       UNION ALL SELECT 18
       UNION ALL SELECT 19
       UNION ALL SELECT 20
       UNION ALL SELECT 21
       UNION ALL SELECT 22
       UNION ALL SELECT 23) AS h
LEFT OUTER JOIN ANIMAL_OUTS ON HOUR(DATETIME) = h.Hour
GROUP BY h.Hour
ORDER BY h.Hour

- 모든 시간을 조회한다 : 0~23을 조회하는 h테이블과 ANIMAL_OUTS 테이블을 LEFT OUTER JOIN으로 조인한다
- 0~23 시간으로 그룹핑하고 시간 순서대로 정렬한다

반응형