개인공부/알고리즘
프로그래머스 - 입양 시각 구하기(2) SQL
KEEMSY
2023. 8. 6. 22:14
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나는 이 문제는 입양시간이 존재하지 않을 경우, 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