본문 바로가기

DataBase/SQL Queries

[프로그래머스] GROUP BY - 입양 시각 구하기(2) / 매 시간대별 통계, JOIN, IFNULL

문제

 

 

풀이

SELECT T1.HOURS AS HOUR, IFNULL(T2.COUNT,0) AS COUNT
FROM
    (SELECT @N := @N + 1 AS HOURS
    FROM ANIMAL_OUTS, (SELECT @N := -1 FROM DUAL) NN LIMIT 24
    )T1
LEFT JOIN
    (SELECT HOUR(DATETIME) AS HOUR, COUNT(*)AS COUNT
    FROM ANIMAL_OUTS
    WHERE HOUR(DATETIME) BETWEEN '0' AND '24' -- 없으면 오류남!
    GROUP BY HOUR(DATETIME)
    ORDER BY HOUR(DATETIME))T2
    ON T1.HOURS = T2.HOUR

해결 과정

1. 0~23까지 증가하는 컬럼(테이블에서의 각 열에 해당) 만들기

2. 둘을 JOIN 하기

3. NULL값에는 0을 주가 

 

 

1. 0~23까지 증가하는 컬럼 만들기

DUAL을 사용하여 증가하는 쿼리문을 만들었다. 

0부터 1씩 증가하고 , 24일 때 멈춘다.

SELECT @N := @N + 1 AS HOURS
FROM ANIMAL_OUTS, (SELECT @N := -1 FROM DUAL) NN LIMIT 24

 

2. 둘을 JOIN 하기

출처 : 이미지에 명시

LEFT JOIN ( = LEFT OUTER JOIN)

A의 내용은 그대로 있고 B와 겹치는 부분의 내용을 추출할 수 있다. 그리고 A의 내용과 일치되지 않는 구문은 null 값을 반환하게 된다.

-- 명시적 조인
SELECT column_name(s)
FROM table1 A
LEFT JOIN table2 B
ON A.column_name=B.column_name; -- 조건

 

-- 암시적 조인
SELECT column_name(s)
  FROM table1 A , tlable2 B
 WHERE A.column_name=B.column_name(+); -- 조건

 

 

0~23까지 있는 컬럼에서 ANIMAL_OUTS과 겹치는 값을 구하고 싶기 때문에 LEFT JOIN을 사용했다.

 

 

3. NULL값에는 0을 주기 - IFNULL

Column의 값이 NULL을 반환할 때, 다른 값으로 출력할 수 있도록 하는 함수이다.

SELECT IFNULL(Column명, "Null일 경우 대체 값") FROM 테이블명; 

 

 

 

 

 

문제가 복잡해서 블로그를 참고하여 해결했다.

아직 DUAL을 이용하여 증가하는 칼럼을 만든 부분이 이해가 잘 안 가지만..

더 공부하도록 해야겠다.

 

 

 


https://happyguy81.tistory.com/118?category=798348 

 

[MYSQL] 쿼리문을 이용한 매시간대별 방문 통계 구하기

2021/02/04 - [프로그래밍/Server] - [MYSQL] 시간대별 방문자 통계 구하기 2021-01-04 00:04:45 와 같은 " data-og-host="happyguy81.tistory.com" data-og-source-url="https://happyguy81.tistory.com/117" dat..

happyguy81.tistory.com

https://happyguy81.tistory.com/125

 

[MYSQL] 1부터 1000까지 한꺼번에 데이터 삽입(insert)하기와 1~100까지 증가하는 쿼리문(select, dual)

증가하는 값을 획득하기 위해서 dual을 사용하여 증가하는 구문을 사용했다. 근데 데이터를 가지고 있는 tables, 의 길이가 원하는 수 만큼 (아래의 구문의 경우는 16개) 행이 존재 하지 않으면 그만

happyguy81.tistory.com

https://blog.leocat.kr/notes/2017/07/28/sql-join-on-vs-where

 

[SQL] join의 on절과 where절 차이

이전 블로그에서 옮겨온 포스트

blog.leocat.kr

https://makand.tistory.com/entry/SQL-LEFT-JOIN-%EA%B5%AC%EB%AC%B8

 

SQL LEFT JOIN 구문

안녕하세요!! 이번 포스팅에서는 SQL 에서 LEFT JOIN 구문에 대해서 설명드리겠습니다. INNER JOIN 구문이 교집합 구문이었다면 LEFT JOIN은 LEFT 를 포함한 교집합 구문이라 생각하시면 되겠습니다. 이미

makand.tistory.com

https://velog.io/@gillog/DB-MySQL-NULL-%EC%B2%98%EB%A6%ACIFNULL-CASE-COALESCE

 

[DB] MySQL NULL 처리(IFNULL, CASE, COALESCE)

MySQL에서 Column의 값이 Null인 경우를 처리해주는 함수들은 IFNULL, CASE, COALESCE과 같은 함수들이 있다.Orcale의 NVL()과 비슷한 기능을 한다.해당 Column의 값이 NULL을 반환할 때, 다른 값으로 출력할 수 있

velog.io