문제
풀이
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
'DataBase > SQL Queries' 카테고리의 다른 글
[프로그래머스]JOIN - 없어진 기록 찾기 / LEFTJOIN, 서브쿼리(Subqueries) (0) | 2022.03.22 |
---|---|
[프로그래머스] IS NULL, IS NOT NULL, IF NULL (0) | 2022.03.18 |
[프로그래머스] GROUP BY - 입양 시각 구하기(1) / 통계 유형별 조회, BETWEEN (0) | 2022.03.07 |
[프로그래머스]GROUP BY - 동명 동물 수 찾기 (0) | 2022.02.09 |
[프로그래머스]GROUP BY - 고양이와 개는 몇 마리 있을까 (0) | 2022.02.06 |