문제 출처: https://programmers.co.kr/learn/courses/30/lessons/59413
코딩테스트 연습 - 입양 시각 구하기(2) | 프로그래머스
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. NAME TYPE NULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FA
programmers.co.kr
데이터에는 7시부터 19시까지 데이터 밖에 없기 때문에 0 ~ 6시, 20시 ~ 23시까지 출력하기 위해서는 LEFT JOIN을 사용해야 했습니다.
여태까지는 INNER JOIN만 사용했는데 INNER JOIN의 경우 양 테이블 간의 교집합만 추려내는 반면 LEFT JOIN의 경우에는 첫 번째 테이블은 그대로 있으면서 양 테이블 간의 교집합을 추려낸다고 볼 수 있습니다.
자세한 내용은 https://makand.tistory.com/entry/SQL-LEFT-JOIN-%EA%B5%AC%EB%AC%B8 를 참고하시면 좋을 것 같습니다.
SELECT | |
TEMP.hour AS HOUR, | |
COUNT(HOUR(ANIMAL_OUTS.DATETIME)) AS COUNT | |
FROM | |
( | |
SELECT | |
0 AS hour | |
UNION ALL | |
SELECT 1 | |
UNION ALL | |
SELECT 2 | |
UNION ALL | |
SELECT 3 | |
UNION ALL | |
SELECT 4 | |
UNION ALL | |
SELECT 5 | |
UNION ALL | |
SELECT 6 | |
UNION ALL | |
SELECT 7 | |
UNION ALL | |
SELECT 8 | |
UNION ALL | |
SELECT 9 | |
UNION ALL | |
SELECT 10 | |
UNION ALL | |
SELECT 11 | |
UNION ALL | |
SELECT 12 | |
UNION ALL | |
SELECT 13 | |
UNION ALL | |
SELECT 14 | |
UNION ALL | |
SELECT 15 | |
UNION ALL | |
SELECT 16 | |
UNION ALL | |
SELECT 17 | |
UNION ALL | |
SELECT 18 | |
UNION ALL | |
SELECT 19 | |
UNION ALL | |
SELECT 20 | |
UNION ALL | |
SELECT 21 | |
UNION ALL | |
SELECT 22 | |
UNION ALL | |
SELECT 23 | |
) AS TEMP | |
LEFT JOIN | |
ANIMAL_OUTS | |
ON TEMP.hour = HOUR(ANIMAL_OUTS.DATETIME) | |
GROUP BY | |
HOUR | |
ORDER BY | |
HOUR |
(2019-09-20 13:02)
저보다 훨씬 깔끔하게 쿼리를 작성하신 분이 계시네요.
rudtyz님이 올려주신 코드입니다.
SET @hour = -1; | |
SELECT | |
(@hour := @hour +1) as HOUR, | |
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(`datetime`) = @hour) AS `COUNT` | |
FROM | |
ANIMAL_OUTS | |
WHERE | |
@hour < 23 |
*코드가 상당히 지저분하네요. 개선할 방법을 찾아보고 포스팅해보도록 하겠습니다.
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'DB > 프로그래머스 SQL 고득점 Kit' 카테고리의 다른 글
SQL 고득점 Kit NULL 처리하기 (0) | 2019.09.20 |
---|---|
SQL 고득점 Kit 이름이 있는 동물의 아이디 (0) | 2019.09.20 |
SQL 고득점 Kit 입양 시각 구하기(1) (0) | 2019.09.20 |
SQL 고득점 Kit 중복 제거하기 (0) | 2019.09.20 |
SQL 고득점 Kit 동물 수 구하기 (0) | 2019.09.20 |