티스토리 뷰

  • 문제
    ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.

    보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
  • NAME TYPE NULLABLE
    ANIMAL_ID VARCHAR(N) FALSE
    ANIMAL_TYPE VARCHAR(N) FALSE
    DATETIME DATETIME FALSE
    NAME VARCHAR(N) TRUE
    SEX_UPON_OURCOME VARCHAR(N) FALSE
  • 문제풀이
    쉬운 문제인줄 알았는데 아니었다 흙,, TABLE에는 HOUR(DATETIME)이 10~19시까지 밖에 없었기 때문에 두가지 방법을 사용해서 구하면된다!
    1. 첫번째 방법은 0~23까지의 TABLE을 따로 만들어주고 ANIMAL_OUTS 테이블과 LEFT JOIN을 시키는 방법이 있다.
    2. 두번째 방법은 SET 함수를 사용해서 변수를 선언하여 출력하는 방법이다.

 

  1. 0~23이 들어간 H1 TABLE을 만들고 ANIMAL_OUTS LEFT JOIN하기
    SELECT H1.HOUR, IFNULL(OUTS.COUNT,0) AS COUNT
    FROM (SELECT 0 AS HOUR UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION SELECT 20 UNION SELECT 21 UNION SELECT 22 UNION SELECT 23) AS H1
    LEFT JOIN (SELECT HOUR(DATETIME) AS 'HOUR', COUNT(*) AS 'COUNT' FROM ANIMAL_OUTS GROUP BY HOUR) AS OUTS ON H1.HOUR = OUTS.HOUR​


  2. SET 함수를 사용해서 변수를 선언하여 출력하기
    • 주의사항! SET에서는 =이 대입연산자, 비교연산자로 쓰인다. 하지만 일반 함수는 대입연산자를 쓰려면 :=을 사용해야함
    • 변수를 선언할 때는 SET @변수명 =(또는 :=) '값'
      SET @HOUR_LIST = -1;
      SELECT (@HOUR_LIST := @HOUR_LIST + 1) AS 'HOUR', (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR_LIST) FROM ANIMAL_OUTS WHERE @HOUR_LIST < 23;​
    • 설명: HOUR_LIST라는 변수에 -1값을 설정한 후 1씩 더하여 0에서 23시까지 모든 COUNT를 출력한다.

'SQL' 카테고리의 다른 글

[프로그래머스 SQL kit] 상위 n개 레코드  (0) 2021.11.02
[프로그래머스 SQL kit] NULL 처리하기  (0) 2021.11.01
DELETE vs TRUNCATE vs DROP  (0) 2021.07.16
SQL 기본 이해  (0) 2021.07.16
[실습 3]인사 자료 조회하기  (0) 2021.07.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함