[프로그래머스] SQL 코딩테스트 연습 02. 입양 시각 구하기(2)

2021. 8. 9.·☕️ 커리어 & 인터뷰 준비/코딩 테스트

데이터셋 확인은 이전글 참조

 

2021.08.09 - [SQL/MySQL] - [프로그래머스] SQL 코딩테스트 연습 01. DB 확인

 

[프로그래머스] SQL 코딩테스트 연습 01. DB 확인

프로그래머스 사이트에서 SQL 문제를 풀어볼 수 있다. https://programmers.co.kr/learn/challenges?tab=sql_practice_kit 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 프..

ggarden.tistory.com

 

 

프로그래머스 SQL 문제들 중에서 어려웠던 문제들을 리뷰 차원에서 다시 한 번 풀어본다.

 

GROUP BY 카테고리의 입양 시각 구하기(2) 문제이다.

 

모든 문제들은 레벨1~4까지 있는데 다른 문제들과 다르게 레벨4로 압도적으로 높다.

 

언어는 MySQL과 ORACLE 중에서 선택할 수 있고, 본 해설에서는 MySQL 기준으로 풀어본다.

 

[문제]

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

[예시]

예시

입양이 발생하지 않는 시간대도 함께 표시되어야 한다. 즉, 0시부터 23시까지의 전체적인 데이터가 나타나야 한다.

 

실제 입양이 발생한 데이터만 출력하는 것은 코드 몇줄로 간단하지만,

0시부터 23시까지 시각이 전부 나타나게 해야하기 때문에 쿼리가 길어지게 된다.

 

먼저, WITH 조건을 통해 0시부터 23시까지 로우가 존재하는 HOUR 컬럼이 담긴 임시 테이블을 생성한다.

그리고 입양이 발생한 데이터를 서브쿼리로 만들어 LEFT JOIN을 통해 결합한다.

 

그러면 입양 이력이 있는 COUNT 컬럼에는 값이 채워지고, NULL값을 0으로 변환하기 위해

IFNULL 함수를 사용한다.

 

-- 코드를 입력하세요
WITH TMP1 AS (
    SELECT 0 AS HOUR UNION
    SELECT 1 AS HOUR UNION
    SELECT 2 AS HOUR UNION
    SELECT 3 AS HOUR UNION
    SELECT 4 AS HOUR UNION
    SELECT 5 AS HOUR UNION
    SELECT 6 AS HOUR UNION
    SELECT 7 AS HOUR UNION
    SELECT 8 AS HOUR UNION
    SELECT 9 AS HOUR UNION
    SELECT 10 AS HOUR UNION
    SELECT 11 AS HOUR UNION
    SELECT 12 AS HOUR UNION
    SELECT 13 AS HOUR UNION
    SELECT 14 AS HOUR UNION
    SELECT 15 AS HOUR UNION
    SELECT 16 AS HOUR UNION
    SELECT 17 AS HOUR UNION
    SELECT 18 AS HOUR UNION
    SELECT 19 AS HOUR UNION
    SELECT 20 AS HOUR UNION
    SELECT 21 AS HOUR UNION
    SELECT 22 AS HOUR UNION
    SELECT 23 AS HOUR
)

SELECT TMP1.HOUR, IFNULL(TMP2.COUNT, 0) COUNT
FROM TMP1
    LEFT JOIN (
        SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
        FROM ANIMAL_OUTS A
        GROUP BY HOUR(DATETIME)
        ORDER BY HOUR
        ) AS TMP2 ON TMP1.HOUR = TMP2.HOUR

 

결과를 확인해보면

 

 

잘 출력되는 것을 확인할 수 있다.

 

'☕️ 커리어 & 인터뷰 준비/코딩 테스트' 카테고리의 다른 글
  • 프로그래머스 < 기사단원의 무기 > JavaScript
  • [프로그래머스] SQL 코딩테스트 연습 03. 우유와 요거트가 담긴 장바구니
  • [프로그래머스] SQL 코딩테스트 연습 01. DB 확인
  • 해커랭크 문제풀이 #2 - Revising the Select Query II
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (510)
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (86)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
[프로그래머스] SQL 코딩테스트 연습 02. 입양 시각 구하기(2)
상단으로

티스토리툴바