처음에 문제만 읽었을 때엔 아니 띠용? 이렇게 쉬운 문제가 Lv 4? 라고 생각했으나, 예시 답안을 보니 Lv4일만 했다.
기록이 없는 빈 시간대의 데이터도 만들어야 했기 때문이다.
참고로 입양 시각 구하기(1) 문제는, 같은 것을 구하되 기록이 없는 빈 시간대는 고려할 필요가 없던 문제였고, Lv2 문제였다. 그래서 간단히 휘리릭 풀었었다.
SELECT HOUR(DATETIME) AS HOUR
, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
ORDER BY HOUR
그런데, 기록 없는 빈 시간대의 데이터도 있어야 한다는 저 조건 하나만으로 Lv이 2단계나 뛴다?
=> 지금까지의 SQL 코테 풀이 짬으로 보아하니, 이건 문가 대단하게 어려운 쿼리를 짜야 풀린다기보단(물론 이런 상황에 맞는 특정 구문이나 함수를 쓰지 않고 구현하려면 당연히 어려울테지만) 뭔가 특정 함수 혹은 구문을 아느냐 모르느냐를 묻는 문제다! 라는 직감이 왔다
=> 그럼 그것이 무엇이냐... 열심히 찾아본 끝에 발견했다.
이번에 정말 처음 봤는데, 물론 유용하게 쓰이니까 만들어졌겠지만, 어디에 주로 쓰이는지 궁금했던...
WITH RECURSIVE() 구문
재귀 쿼리를 짤 때 사용하는 구문이고, 관련해서 자세한 내용은 따로 포스팅 해 두었으니 해당 글을 참고하길 바란다.
-- 풀이 쿼리
WITH RECURSIVE RC AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR+1
FROM RC
WHERE HOUR < 23
)
SELECT RC.HOUR
, COUNT(A.DATETIME) AS COUNT
FROM RC
LEFT JOIN ANIMAL_OUTS AS A
ON RC.HOUR = HOUR(A.DATETIME)
GROUP BY RC.HOUR
ORDER BY RC.HOUR
[STUDY/SQL, DB] - [MySQL] WITH RECURSIVE 구문
'코딩테스트 > SQL - 프로그래머스' 카테고리의 다른 글
SQL 고득점 kit(JOIN) - 주문량이 많은 아이스크림들 조회하기 (0) | 2024.02.20 |
---|---|
SQL 고득점 kit(IS NULL) - 업그레이드 할 수 없는 아이템 구하기 (0) | 2024.02.20 |
SQL 고득점 kit(GROUP BY) - 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2024.02.19 |
SQL 고득점 kit(GROUP BY) - 식품분류별 가장 비싼 식품의 정보 조회하기 (4) | 2024.02.15 |
SQL 고득점 kit(GROUP BY) - 성분으로 구분한 아이스크림 총 주문량 (0) | 2024.02.15 |