https://school.programmers.co.kr/learn/courses/30/lessons/59413
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
SET @HOUR = -1;
SELECT HOUR_TABLE.HOUR AS HOUR, IFNULL(OUTS.COUNT, 0) AS COUNT
FROM (SELECT (@HOUR := @HOUR + 1) AS HOUR
FROM ANIMAL_OUTS
WHERE @HOUR < 23) AS HOUR_TABLE
LEFT JOIN (SELECT HOUR(DATETIME) AS HOUR, (COUNT(HOUR(DATETIME))) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)) AS OUTS
ON OUTS.HOUR = HOUR_TABLE.HOUR
위에는 정답코드입니다.
오답코드를 통하여 정답코드를 도출하도록 하겠습니다.
먼저 단순하게 GROUP BY를 써서 문제를 해결할 수 있겠다는 생각으로 GROUP BY로 진행을 해보았습니다.
SELECT HOUR(DATETIME) AS HOUR, COUNT(HOUR(DATETIME)) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)
위의 오답코드로 출력을 해보았을때 결과는 아래와 같았습니다.
저희는 HOUR가 0~23의 값이 필요하지만 7~19까지의 값만 존재하는 것을 확인할 수 있습니다.
그래서 SET 명령어를 사용하여 @HOUR 변수를 만들어서 문제를 해결했습니다.
SET @HOUR = 0;
SELECT (@HOUR := @HOUR +1) AS HOUR
FROM ANIMAL_OUTS
위의 코드를 실행하면 아래와 같이 총 100개의 행이 생성이됩니다.
100개의 행을 모두 담으면 사진이 너무 커져 18까지만 가져왔습니다.
100개의 행이 생성이 되는 이유는 아래와 같이 ANIMAL_OUTS 테이블이 총 100개의 행을 가지고 있기 때문입니다.
SELECT COUNT(*)
FROM ANIMAL_OUTS
저는 0~100까지의 행이아니라 0~23까지의 행이 필요하기 때문에 코드를 아래와 같이 수정했습니다.
SET @HOUR = -1;
SELECT (@HOUR := @HOUR +1) AS HOUR
FROM ANIMAL_OUTS
WHERE @HOUR < 23
0~23까지의 행을 구하였고 이렇게 만든 테이블과 위에서 구한 GROUP BY만든 ANIMAL_OUTS 테이블을 LEFT JOIN을 하였습니다.
SET @HOUR = -1;
SELECT HOUR_TABLE.HOUR, OUTS.COUNT
FROM (SELECT (@HOUR := @HOUR + 1) AS HOUR
FROM ANIMAL_OUTS
WHERE @HOUR < 23) AS HOUR_TABLE
LEFT JOIN (SELECT HOUR(DATETIME) AS HOUR,
COUNT(HOUR(DATETIME)) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)) AS OUTS
ON HOUR_TABLE.HOUR = OUTS.HOUR
위의 코드를 실행시킨 결과입니다.
HOURS 컬럼은 0~23값을 가지고 있고 COUNT 컬럼은 NULL값이 존재하는 것을 확인할 수 있습니다.
마지막으로 IFNULL()함수를 사용하여 NULL값은 0으로 대체하여 문제를 해결하였습니다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 오프라인/온라인 판매 데이터 통합하기 MySQL (0) | 2022.12.12 |
---|---|
[코딩테스트] 프로그래머스 그룹별 조건에 맞는 식당 목록 출력하기 MySQL (0) | 2022.12.10 |
[코딩테스트] 프로그래머스 주문량이 많은 아이스크림들 조회하기 (0) | 2022.12.09 |
[코딩테스트] 프로그래머스 취소되지 않은 진료 예약 조회하기 MySQL (0) | 2022.12.08 |
[코딩테스트] 프로그래머스 년, 월, 성별 별 상품 구매 회원 수 구하기 MySQL (0) | 2022.12.08 |