1. 고양이와 개는 몇 마리 있을까
SELECT ANIMAL_TYPE, COUNT(*) count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE;
동물의 TYPE 별로 그룹핑하고, 오름차순 정렬을 해줘서 조회합니다.
또한 COUNT(*)로 각 그룹에 속하는 튜플의 갯수도 같이 출력합니다.
2. 동명 동물 수 찾기
SELECT NAME, COUNT(*) COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT > 1
ORDER BY NAME;
GROUP의 뒤에 HAVNIG 절을 달아줌으로써 COUNT > 1 에 대항하는 GROUP만 조회합니다.
3. 입양 시각 구하기(1)
SELECT HOUR(DATETIME), COUNT(*) COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) < 20
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME);
DATETIME 에서 시간만 추출해서 원하는 시간대의 입양만 조회합니다. 또한 시간대별로 GROUPING 합니다.
4. 입양 시각 구하기(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을 활용해 새로운 칼럼을 만들어주는 것입니다. 이 이유는 원본 테이블의 DATETIME을 보면 0시~23시 중간에 COUNT가 0인 시간대가 있기 때문이다. 따라서 문제에서 요구하는 연속적인 [0,1,2,3, ..., 23] 시까지의 모든 튜플을 만들어주어야 한다.
SET 문을 통해서 @HOUR 라는 변수를 잡습니다. (int hour; 처럼)
SET @HOUR = -1;
SELECT (@HOUR := @HOUR +1) AS HOUR
FROM ANIMAL_OUTS
중간 단계를 보기 위해서, 위까지 작성하면 HOUR 컬럼만 출력이 되고, HOUR는 0부터 무한히 출력됩니다.
여기서 추가로
WHERE @HOUR < 23
조건을 추가해주면 HOUR는 23까지만 출력이 되겠습니다.
그리고 추가로, 그룹별로 COUNT한 컬럼을 추가하기위해서, 서브쿼리를 뒤에 넣어줍니다. (SELECT 뒤의 인자에 괄호 한의 SELECT문)
그리고 서브쿼리로 들어가있는 SELECT 문에서 @HOUR의 변수를 조건에 넣으면 GROUPING 과 같은 효과를 얻을 수 있습니다.
해당 문법이 생소한 문법이라 공부가 필요하겠습니다.
'데이터베이스 > SQL' 카테고리의 다른 글
[SQL][프로그래머스 고득점KIT] IS NULL (0) | 2022.08.02 |
---|---|
[SQL][프로그래머스 고득점KIT] SUM, MAX, MIN (0) | 2022.07.20 |
[SQL][프로그래머스 고득점KIT] SELECT (0) | 2022.07.20 |
[SQL] 프로그래머스 SQL 고득점Kit 소개 (0) | 2022.07.20 |