프로그래머스 코딩테스트 SQL 문제를 풀며 정리하는 내용입니다.
환경은 MySQL로 설정했습니다 😃
문제 및 결과 예시
풀이 과정
SELECT HOUR(DATETIME) AS HOUR
, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 0 AND 23
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME);
처음에는 이렇게 작성을 하고 결과를 확인하였더니..
프로그래머스에서 제공해준 결과 예시에는 COUNT 수가 0개인 항목들도 출력이 되어야 하는데
위의 쿼리로는 0개의 항목들은 나오지 않았다.
구글링을 한 결과 SET을 사용하면 된다는 답변을 얻었고 내 쿼리를 수정하였다.
1. 일단 SET을 통해서 변수를 선언해주고 0부터 23까지 출력되도록 만들었다.
SET @HOUR = -1;
SELECT (@HOUR := @HOUR + 1) AS HOUR
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
2. 선언한 HOUR 변수의 값과 기존 내가 작성한 쿼리를 JOIN을 걸어 시간을 매핑시켜주었다.
SET @HOUR = -1;
SELECT (@HOUR := @HOUR + 1) AS HOUR
, IFNULL(B.COUNT, 0) AS COUNT
FROM ANIMAL_OUTS A
LEFT OUTER JOIN (
SELECT HOUR(DATETIME) AS HOUR
, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 0 AND 23
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)
) B ON @HOUR + 1 = B.HOUR
WHERE @HOUR < 23;
저도 많이 부족한 실력이기에 위의 쿼리가 당연히 정답은 아닙니다 😀 !
피드백 주시면 감사히 받겠습니다 🙌