나는 이 문제는 입양시간이 존재하지 않을 경우, 0으로 집계하는 것이 핵심이 될 것이라고 생각했다.
그러나 아직 부족한 실력때문에 혼자서 해결하지 못하고, GPT의 도움을 받았다.
WITH RECURSIVE AllHours AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1 AS HOUR
FROM AllHours
WHERE HOUR < 23
)
SELECT
AllHours.HOUR,
COUNT(ANIMAL_OUTS.DATETIME) AS COUNT
FROM AllHours
LEFT JOIN ANIMAL_OUTS ON AllHours.HOUR = HOUR(ANIMAL_OUTS.DATETIME)
GROUP BY AllHours.HOUR
ORDER BY AllHours.HOUR;
GPT는 0~23까지의 모든 시간이 포함된 테이블을 생성하고, JOIN 을 통해 각 시간에 대한 집계를 진행했다. 나는 테이블을 새로 만들 생각을 못했는데, 새로운 방법을 새로 알수 있었다.
CTE(Common Table Expression)
이렇게 임시 테이블을 만드는 것을 CTE(Common Table Expression) 이라고 한다. CTE 는 SELECT, INSERT, UPDATE 또는 DELETE 문 내에서 참조할 수 있는 SQL의 임시 결과 집합 을 의미한다. 이를 활용하면 쿼리를 단순화 할 수 있으며, SQL 코드를 더욱 쉽게 유지하고 이해할 수 있도록 도움이 된다고 한다.
WITH CTE_Name (Column1, Column2, ...) AS (
-- SQL query that defines the CTE
)
- WITH: 이 키워드는 CTE 정의를 시작하는 데 사용된다.
- CTE_Name: CTE에 부여된 이름으로서, 임시 결과 집합의 별칭 역할을 하고 나중에 메인 쿼리에서 참조할 수 있다.
- (Column1, Column2, ...): 선택 사항으로, 이 부분은 CTE에서 사용할 수 있는 열 이름을 지정한다. 지정하지 않으면 CTE를 정의하는 데 사용된 SQL 쿼리에서 열 이름이 유추된다.
- AS: CTE의 SQL 쿼리 정의의 시작 부분을 나타낸다.
- -- SQL query that defines the CTE: 임시 결과 집합을 생성하는 실제 SQL 쿼리이다. SELECT, INSERT, UPDATE 또는 DELETE 문이 될 수 있다.
728x90
'개인공부 > 알고리즘' 카테고리의 다른 글
[ 그리디 ] 백준 1783 병든 나이트 (0) | 2024.03.07 |
---|---|
프로그래머스 - 그룹별 조건에 맞는 식당 목록 출력하기 (SQL) (0) | 2023.08.20 |
프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2023.08.06 |
프로그래머스 - 직사각형 넓이 구하기 (Kotlin) (0) | 2023.08.01 |
프로그래머스 - 캐릭터의 좌표 (Kotlin) (0) | 2023.07.31 |